

<!DOCTYPE html>
<html lang="zh-CN">


<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta http-equiv="Content-Language" content="zh-CN"/>
    <meta name="robots" content="index, follow"/>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="keywords" content="开源中国,博客专区">

    <meta itemprop="name" content="博客专区 - 开源中国社区"/>
<meta itemprop="image" content="https://www.oschina.net/img/logo_s2.png" />
    <meta name="description" itemprop="description" content="博客专区 - 开源中国社区">
	<title>博客专区 - 开源中国社区</title>


            <link type="text/css" rel="stylesheet" href="dist/oschina/blog/stylesheets/blog-main-33d26a398ce415f1e673f211c4a0053fe10c7d15.css">                <script>
            var _hmt = _hmt || [];
            (function() {
                var hm = document.createElement("script");
                hm.src = "//hm.baidu.com/hm.js?032e0aa1d4e0eccb9abacfd90f3a4ef8";
                var s = document.getElementsByTagName("script")[0];
                s.parentNode.insertBefore(hm, s);
            })();
        </script>
    
</head>

<body class="sc sc-bgc body">
    <x-foo-define data-define="www_blog"></x-foo-define>
    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="0" height="0" style="position:absolute;"><defs><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_all"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M4 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12-8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-6 8c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0-6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z" fill="#9D9D9D"/></g></svg><svg width="6" height="11" viewBox="0 0 6 11" id="blog_nav_icon_ic_type_arrow"><path d="M.67 9.352l2.976-3.913L.64 1.647C.384 1.307.488.85.876.624c.386-.226.91-.135 1.167.204L5.358 5.03c.189.248.19.57.001.82l-3.285 4.32c-.258.341-.782.433-1.169.208A.719.719 0 0 1 .53 9.76c0-.141.044-.282.14-.408z" fill="#7DD777" fill-rule="evenodd"/></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_cloud"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M15.55 8.5A5.645 5.645 0 0 0 10 4C7.825 4 5.95 5.2 5.05 7 2.725 7.3 1 9.175 1 11.5 1 13.975 3.025 16 5.5 16h9.75c2.1 0 3.75-1.65 3.75-3.75 0-1.95-1.575-3.6-3.45-3.75zm-.3 6H5.5c-1.65 0-3-1.35-3-3s1.35-3 3-3h.525c.525-1.725 2.1-3 3.975-3 2.25 0 4.125 1.875 4.125 4.125V10h1.125c1.275 0 2.25.975 2.25 2.25s-.975 2.25-2.25 2.25z" fill="#9D9D9D"/></g></svg><svg width="16" height="16" viewBox="0 0 16 16" id="blog_nav_icon_ic_type_database"><g transform="translate(-2 -2)" fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M10 2c-3.853 0-8 .91-8 2.91v10.18c0 2 4.147 2.91 8 2.91 3.853 0 8-.91 8-2.91V4.91c0-2-4.147-2.91-8-2.91zm0 1.455c4.216 0 6.396 1.042 6.543 1.454-.147.412-2.327 1.455-6.543 1.455S3.604 5.32 3.457 4.909C3.604 4.497 5.784 3.455 10 3.455zM3.455 6.677C5.002 7.453 7.559 7.818 10 7.818c2.44 0 4.998-.366 6.546-1.141V9.99c-.115.404-2.296 1.464-6.546 1.464-4.255 0-6.436-1.062-6.545-1.455V6.677zM10 16.545c-4.255 0-6.436-1.062-6.545-1.454v-3.323c1.547.775 4.104 1.141 6.545 1.141s4.999-.366 6.546-1.142v3.313c-.11.403-2.291 1.465-6.546 1.465z" fill="#9D9D9D"/></g></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_enterprise"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M10 6.111V3H2v14h16V6.111h-8zm-4.8 9.333H3.6V13.89h1.6v1.555zm0-3.11H3.6v-1.556h1.6v1.555zm0-3.112H3.6V7.667h1.6v1.555zm0-3.11H3.6V4.555h1.6V6.11zm3.2 9.332H6.8V13.89h1.6v1.555zm0-3.11H6.8v-1.556h1.6v1.555zm0-3.112H6.8V7.667h1.6v1.555zm0-3.11H6.8V4.555h1.6V6.11zm8 9.332H10V13.89h1.6v-1.556H10v-1.555h1.6V9.222H10V7.667h6.4v7.777zm-1.6-6.222h-1.6v1.556h1.6V9.222zm0 3.111h-1.6v1.556h1.6v-1.556z" fill="#9D9D9D"/></g></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_frontend"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M3.8 3C2.81 3 2 3.788 2 4.75v10.5c0 .962.81 1.75 1.8 1.75h12.4c.99 0 1.8-.788 1.8-1.75V4.75C18 3.788 17.19 3 16.2 3H3.8zm.198 13A.998.998 0 0 1 3 14.99v-1.98c0-.558.446-1.01.998-1.01h7.004c.551 0 .998.443.998 1.01v1.98c0 .558-.446 1.01-.998 1.01H3.998zm0-5A.996.996 0 0 1 3 10V7c0-.552.446-1 .998-1h7.004c.551 0 .998.444.998 1v3c0 .552-.446 1-.998 1H3.998zm10.011 5c-.557 0-1.009-.456-1.009-.995v-8.01c0-.55.443-.995 1.01-.995h1.98c.558 0 1.01.456 1.01.995v8.01c0 .55-.443.995-1.01.995h-1.98z" fill="#9D9D9D"/></g></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_game"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M12.184 10l5.529-5.642a1.013 1.013 0 0 0 0-1.414C15.855 1.046 13.399 0 10.799 0 5.396 0 1 4.485 1 10s4.396 10 9.799 10c2.6 0 5.056-1.046 6.914-2.945a1.015 1.015 0 0 0 0-1.414L12.184 10zM3 10c0-4.411 3.62-8 8.067-8 1.802 0 3.52.595 4.933 1.693l-5.646 5.6a.995.995 0 0 0 0 1.414l5.646 5.6A8.002 8.002 0 0 1 11.067 18C6.619 18 3 14.411 3 10zm7.368-5.56a1.522 1.522 0 0 1 0 2.12 1.449 1.449 0 0 1-2.078 0 1.522 1.522 0 0 1 0-2.12 1.449 1.449 0 0 1 2.078 0z" fill="#9D9D9D"/></g></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_hardware"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M12.235 7.642c0-.578.298-.867.895-.867.59 0 .884.289.884.867 0 .578-.295.867-.884.867-.597 0-.895-.29-.895-.867zm-1.189 0c0 1.36.695 2.041 2.084 2.041 1.382 0 2.073-.68 2.073-2.041 0-1.355-.69-2.032-2.073-2.032-1.39 0-2.084.677-2.084 2.032zm4.909 2.274c0 .348-.178.522-.533.522h-4.594c-.356 0-.533-.174-.533-.522V5.367c0-.347.177-.521.533-.521h4.594c.355 0 .533.174.533.521v4.55zm-1.703 1.333c.507 0 .761.249.761.746s-.254.745-.76.745c-.508 0-.762-.248-.762-.745s.254-.746.761-.746zm-2.254 0c.507 0 .76.249.76.746s-.253.745-.76.745c-.508 0-.761-.248-.761-.745s.253-.746.76-.746zm3.443 3.738c0 .192-.101.289-.304.289H7.47c-.203 0-.305-.097-.305-.29v-1.071c0-.193.102-.29.305-.29h7.667c.203 0 .304.097.304.29v1.072zM6.623 5.06c0-.193.098-.289.295-.289h1.094c.196 0 .295.096.295.289v6.357c0 .192-.099.289-.295.289H6.918c-.197 0-.295-.097-.295-.29V5.06zm-1.446 6.357c0 .192-.098.289-.295.289H3.788c-.203 0-.304-.097-.304-.29V5.06c0-.193.101-.289.304-.289h1.094c.197 0 .295.096.295.289v6.357zm-1.607 3.03c0-.498.253-.747.76-.747.508 0 .762.249.762.746s-.254.746-.761.746c-.508 0-.761-.249-.761-.746zm14.126-6.19c.203 0 .304-.096.304-.289V6.775c0-.193-.101-.289-.304-.289h-.447V4.463c0-.975-.495-1.463-1.484-1.463H3.484C2.494 3 2 3.488 2 4.463v11.074C2 16.512 2.495 17 3.484 17h12.28c.99 0 1.485-.488 1.485-1.463v-.261h.447c.203 0 .304-.097.304-.29V12.63c0-.2-.101-.299-.304-.299h-.447v-1.444h.447c.203 0 .304-.097.304-.29V9.404c0-.192-.101-.288-.304-.288h-.447v-.858h.447z" fill="#9D9D9D"/></g></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_language"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M4.695 5.625a.966.966 0 0 0-.671.266h-.001L.329 9.338A.847.847 0 0 0 0 10c0 .246.11.468.285.627l3.747 3.5h.001a.966.966 0 0 0 .652.248c.518 0 .937-.392.937-.875a.842.842 0 0 0-.266-.609h.001l-3.09-2.887 3.08-2.876v-.001a.845.845 0 0 0 .285-.627c0-.483-.42-.875-.937-.875zM20 10c0-.265-.129-.5-.329-.66l-3.694-3.45v.001a.968.968 0 0 0-.672-.266c-.517 0-.937.392-.937.875 0 .246.11.468.285.627l3.08 2.877-3.09 2.886v.001a.843.843 0 0 0-.266.609c0 .483.42.875.937.875a.968.968 0 0 0 .653-.248l3.749-3.5h-.001A.842.842 0 0 0 20 10zm-7.506-7a.936.936 0 0 0-.882.578l-4.99 12.233a.819.819 0 0 0-.063.314c0 .483.42.875.937.875a.936.936 0 0 0 .882-.578l4.99-12.233a.812.812 0 0 0 .063-.314c0-.483-.42-.875-.937-.875z" fill="#9D9D9D"/></g></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_maintain"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M15.403 14.734a.368.368 0 0 1-.004.524.37.37 0 0 1-.515-.008l-2.26-2.257a.365.365 0 0 1 .008-.519.38.38 0 0 1 .524 0l2.247 2.26zM14.404 2c.236 0 .475.018.711.075.25.043.476.117.694.209a.616.616 0 0 1 .192 1c-.467.466-.934.93-1.397 1.396l.079.279.07.284.288.078.28.075c.462-.468.93-.926 1.396-1.397a.62.62 0 0 1 .873 0 .63.63 0 0 1 .148.262c.083.2.149.41.188.62v.008h.004a3.609 3.609 0 0 1-.986 3.256 3.581 3.581 0 0 1-2.54 1.052c-.07 0-.14-.005-.21-.005l-.68.673 3.744 3.743.03.035c.476.494.712 1.127.712 1.76a2.51 2.51 0 0 1-.742 1.788l-.009.009a2.528 2.528 0 0 1-1.78.733 2.499 2.499 0 0 1-1.79-.742l-3.753-3.748-3.827 3.836c-.799.798-1.764.868-2.553.527a2.492 2.492 0 0 1-.807-.545h-.005a2.569 2.569 0 0 1-.541-.803c-.34-.79-.27-1.758.533-2.552v-.01l4.267-4.268-1.562-1.562-1.388-.414a.607.607 0 0 1-.392-.345l-1.332-3.12a.613.613 0 0 1 .11-.716l.558-.555.55-.549a.607.607 0 0 1 .672-.131l3.16 1.348c.166.07.297.21.349.394l.41 1.387L9.69 6.927l1.122-1.112a3.981 3.981 0 0 1-.009-.21h.005c0-1 .402-1.903 1.051-2.548v-.005A3.61 3.61 0 0 1 14.404 2zm-1.763 8.737l-1.842 1.842 3.745 3.744a1.304 1.304 0 0 0 1.841.004l.009-.004c.253-.244.37-.59.37-.92 0-.324-.117-.65-.353-.895l-.026-.027-3.744-3.744zM7.858 8.765l.964-.96-1.671-1.676a.623.623 0 0 1-.166-.306l-.362-1.226-2.514-1.06-.257.253-.258.261 1.07 2.514 1.265.37c.104.031.192.084.261.163l1.668 1.667zm6.459-5.534a2.354 2.354 0 0 0-1.59.698 2.343 2.343 0 0 0-.697 1.676h.009V5.776l.017.143a.608.608 0 0 1-.166.554l-8.296 8.292H3.59c-.384.397-.428.847-.27 1.218.064.143.165.287.282.41a1.4 1.4 0 0 0 .42.283c.37.162.815.118 1.209-.266l4.25-4.25.018-.018 2.706-2.71.017-.021 1.3-1.293h.004a.583.583 0 0 1 .52-.178c.06.009.118.017.183.017.044.004.105.01.175.01.654 0 1.248-.267 1.676-.686v-.009c.406-.402.663-.964.685-1.589-.266.271-.532.533-.799.808a.633.633 0 0 1-.62.187l-.62-.17-.628-.17a.598.598 0 0 1-.436-.437l-.166-.628-.17-.628a.6.6 0 0 1 .161-.58c.275-.28.55-.555.83-.834z" fill="#9D9D9D"/></g></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_misc"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M13.007 17H4.77c-.473 0-.902-.176-1.243-.51A1.717 1.717 0 0 1 3 15.239v-1.942l.018-.077c.092-.387.275-.69.543-.897a.992.992 0 0 1 .613-.206c.243 0 .494.08.768.244a1.2 1.2 0 0 0 .105.056l.065.011.09.045c.197.1.39.148.587.148a1.472 1.472 0 0 0 1.057-.433c.137-.138.241-.292.32-.474.075-.174.111-.36.111-.572a1.48 1.48 0 0 0-.906-1.381 1.452 1.452 0 0 0-1.165.013l-.029.013-.03.01a.658.658 0 0 0-.079.03c-.144.072-.287.14-.425.2a1.333 1.333 0 0 1-.682.119 1.008 1.008 0 0 1-.732-.462c-.138-.209-.21-.477-.228-.844L3 8.807V7.044c0-.479.18-.912.521-1.255a1.729 1.729 0 0 1 1.249-.524h1.5a3.145 3.145 0 0 1-.146-.958c0-.461.09-.9.265-1.302.173-.394.408-.743.7-1.036.291-.293.638-.53 1.03-.703A3.15 3.15 0 0 1 9.398 1c.448 0 .878.09 1.279.266.392.173.739.41 1.03.703.292.293.527.642.7 1.036.175.403.265.84.265 1.302 0 .337-.046.657-.137.958h.472c.48 0 .91.183 1.246.53.332.342.507.774.507 1.249v1.09c.318-.11.654-.165 1.004-.165.434 0 .854.086 1.248.255a3.262 3.262 0 0 1 1.72 1.73c.17.395.255.817.255 1.254 0 .45-.086.876-.256 1.267a3.262 3.262 0 0 1-1.719 1.717 3.138 3.138 0 0 1-2.252.09v.956c0 .478-.177.91-.513 1.246a1.715 1.715 0 0 1-1.24.516zm-8.673-3.445v1.683c0 .121.036.206.124.292a.41.41 0 0 0 .312.13h8.237a.38.38 0 0 0 .297-.123.385.385 0 0 0 .122-.299V11.69l1.099.94c.168.143.364.262.582.352.205.085.42.126.657.126.256 0 .493-.048.723-.147a1.945 1.945 0 0 0 1.021-1.02 1.8 1.8 0 0 0 .145-.732c0-.258-.048-.495-.146-.727a1.918 1.918 0 0 0-1.02-1.024c-.23-.1-.467-.148-.723-.148-.237 0-.452.042-.657.126-.218.09-.414.209-.582.353l-1.1.939V7.044a.415.415 0 0 0-.127-.313.369.369 0 0 0-.291-.125H9.973l.94-1.106c.285-.336.424-.727.424-1.193 0-.279-.05-.528-.152-.764a2.008 2.008 0 0 0-.42-.626 1.998 1.998 0 0 0-.624-.423 1.805 1.805 0 0 0-.743-.153c-.266 0-.509.05-.743.153a1.998 1.998 0 0 0-.623.423 2.009 2.009 0 0 0-.42.626 1.87 1.87 0 0 0-.153.764c0 .232.037.44.113.639.08.21.19.401.325.57l.867 1.09H4.77a.394.394 0 0 0-.306.131.397.397 0 0 0-.13.307v1.65c.046-.021.091-.044.137-.067.066-.033.14-.064.225-.093a2.792 2.792 0 0 1 3.093.597 2.836 2.836 0 0 1 .822 2.01c0 .393-.074.766-.222 1.107a2.82 2.82 0 0 1-2.6 1.713c-.38 0-.754-.086-1.114-.255a1.716 1.716 0 0 1-.34-.15z" fill="#9D9D9D"/></g></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_mobile"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M6 0C4.9 0 4 .9 4 2v16c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V2c0-1.1-.9-2-2-2H6zM5 17V3h10v14H5z" fill="#9D9D9D"/></g></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_multimedia"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M15.09 3H4.91A1.91 1.91 0 0 0 3 4.91v10.18A1.91 1.91 0 0 0 4.91 17h10.18A1.91 1.91 0 0 0 17 15.09V4.91A1.91 1.91 0 0 0 15.09 3zm.637 12.09a.636.636 0 0 1-.636.637H7.08l5.464-5.463 3.182 3.181v1.646zm0-3.444l-3.182-3.182-7.263 7.263h-.373a.636.636 0 0 1-.636-.636V4.909c0-.351.285-.636.636-.636h10.182c.352 0 .636.285.636.636v6.737zm-8.272-6.1a1.91 1.91 0 1 0 0 3.818 1.91 1.91 0 0 0 0-3.819zm0 2.545a.636.636 0 1 1 0-1.273.636.636 0 0 1 0 1.273z" fill="#9D9D9D"/></g></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_server"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M4.167 0C3.522 0 3 .587 3 1.313v17.375C3 19.413 3.522 20 4.167 20h11.666c.645 0 1.167-.587 1.167-1.313V1.313C17 .588 16.478 0 15.833 0H4.167zM4 18V7h12v11H4zm6.707-2.707a1 1 0 1 1-1.414 1.414 1 1 0 0 1 1.414-1.414zM16 5H4V2h12v3z" fill="#9D9D9D"/></g></svg><svg width="20" height="20" viewBox="0 0 20 20" id="blog_nav_icon_ic_type_software"><g fill="none" fill-rule="evenodd"><path d="M0 0h20v20H0z"/><path d="M9.1 10.206a.38.38 0 0 1-.187-.049.352.352 0 0 1-.133-.492l1.499-2.47a.378.378 0 0 1 .509-.13c.177.101.237.322.132.493l-1.498 2.47a.373.373 0 0 1-.321.178zm-1.452.206a.376.376 0 0 1-.294-.138L6.178 8.816a.35.35 0 0 1 .003-.445l1.176-1.424a.38.38 0 0 1 .522-.057c.161.123.187.35.059.505l-.993 1.203.996 1.234a.351.351 0 0 1-.065.504.379.379 0 0 1-.228.076zm4.686 0a.378.378 0 0 1-.231-.078.35.35 0 0 1-.06-.505l.993-1.203-.995-1.234a.351.351 0 0 1 .065-.505.38.38 0 0 1 .522.063l1.176 1.457a.35.35 0 0 1-.003.445l-1.176 1.425a.378.378 0 0 1-.29.135zM3.922 4.085c-.504 0-.908.294-.908.786v8.843c0 .393.404.786.808.786h4.707l-.154 1.573h-1.11c-.405 0-.708.49-.708.884h6.766c.1-.295-.202-.884-.606-.884h-1.11l-.155-1.573h4.708c.404 0 .808-.393.808-.786V4.871c0-.492-.404-.786-.808-.786H3.922zm.101 8.155V4.97H16.06v7.271H4.023z" fill="#9D9D9D"/></g></svg><svg width="6" height="11" viewBox="0 0 6 11" id="icon_arrow-right"><path d="M.67 9.352l2.976-3.913L.64 1.647C.384 1.307.488.85.876.624c.386-.226.91-.135 1.167.204L5.358 5.03c.189.248.19.57.001.82l-3.285 4.32c-.258.341-.782.433-1.169.208A.719.719 0 0 1 .53 9.76c0-.141.044-.282.14-.408z" fill="#9D9D9D" fill-rule="evenodd"/></svg><svg width="135" height="31" viewBox="0 0 135 31" id="icon_blog_logo"><defs><linearGradient x1="100%" y1="100%" x2="0%" y2="0%" id="ba"><stop stop-color="#4AC58C" offset="0%"/><stop stop-color="#24A659" offset="100%"/></linearGradient></defs><g transform="translate(-3)" fill="none" fill-rule="evenodd"><path d="M5.727 6.802c-.579 0-.98-.134-1.247-.357-.223-.222-.357-.668-.357-1.247 0-.535.134-.89.357-1.114.223-.222.668-.356 1.247-.356h20.804c.623 0 1.024.134 1.247.356.223.223.312.624.312 1.114 0 .58-.09.98-.312 1.247-.223.223-.624.357-1.247.357h-3.119v7.395h4.633c.624 0 1.025.089 1.248.311.222.223.312.535.312 1.025 0 .535-.09.936-.312 1.203-.223.267-.624.4-1.248.4h-4.633v9.623c0 .624-.178 1.025-.49 1.247-.356.223-.712.312-1.202.312s-.891-.134-1.203-.356c-.356-.223-.49-.668-.49-1.248v-9.622h-7.484c-.09 1.337-.267 2.54-.58 3.609a10.923 10.923 0 0 1-1.157 2.85c-.49.847-1.07 1.649-1.782 2.317a22.527 22.527 0 0 1-2.406 2.094c-.534.4-1.024.579-1.514.534-.49-.044-.847-.267-1.114-.757-.312-.49-.446-.891-.312-1.292.134-.4.445-.802.891-1.158a26.039 26.039 0 0 0 1.915-1.56c.535-.49.98-1.068 1.381-1.692a9.345 9.345 0 0 0 .891-2.138c.223-.802.357-1.738.446-2.807h-4.5c-.623 0-1.024-.133-1.247-.4-.222-.268-.312-.669-.312-1.204 0-.49.09-.801.312-1.024.223-.223.624-.312 1.248-.312H9.29V6.757H5.727v.045zm6.816 7.395h7.395V6.802h-7.395v7.395zM39.432 14.592c-.356.356-.757.49-1.158.445-.4-.044-.846-.312-1.38-.802-.223-.133-.58-.4-.98-.757-.402-.356-.847-.668-1.293-1.025-.4-.4-.668-.757-.757-1.113-.089-.357.045-.758.401-1.292.624-.802 1.425-.802 2.45-.09.356.312.802.624 1.247.98.49.357.891.669 1.203.98.401.402.668.803.802 1.248.178.49 0 .936-.535 1.426zm.669 4.9a64.518 64.518 0 0 1-1.159 4.054c-.4 1.291-.935 2.539-1.559 3.786-.267.535-.623.891-1.113 1.025-.49.133-.936.089-1.337-.134-.445-.267-.713-.579-.802-.98-.089-.4.045-.98.446-1.648.534-.98.98-2.05 1.336-3.208.357-1.158.713-2.405 1.07-3.742.133-.623.356-1.069.668-1.291.311-.223.712-.312 1.291-.179.535.09.936.312 1.114.669.223.311.267.89.045 1.648zm.49-11.36c-.357.357-.758.49-1.114.446-.4-.045-.846-.312-1.381-.758-.356-.311-.757-.668-1.203-1.024-.445-.357-.802-.668-1.069-.891-.445-.357-.713-.713-.757-1.07-.045-.356.044-.757.4-1.247.313-.4.669-.623 1.114-.668.446-.044.891.134 1.337.49.356.267.624.49.89.668.268.223.446.401.624.535.179.178.357.312.49.445.134.134.312.268.49.446.401.4.669.802.802 1.247.134.401-.044.847-.534 1.337l-.09.044zm8.063-.044c-.936 0-1.56.222-1.916.623-.356.446-.534 1.114-.534 2.05v6.058c0 1.782.802 2.673 2.45 2.673h2.494v5.212c0 .267-.044.445-.178.534-.133.09-.49.045-1.069-.133-.624-.178-1.069-.223-1.336-.09-.268.134-.446.446-.58.892-.133.534-.133.98.09 1.291.178.357.623.58 1.292.669.89.178 1.648.267 2.182.267.535 0 1.025-.09 1.381-.356.357-.223.58-.624.713-1.114.134-.49.223-1.158.223-2.005v-5.212h2.494c.936 0 1.604-.178 1.96-.579.401-.4.58-1.069.58-2.094v-6.058c0-.936-.179-1.648-.535-2.05-.356-.445-.98-.623-1.87-.623h-2.941c.09-.134.134-.223.134-.267.044-.045.044-.09.089-.09.312-.667.312-1.202.044-1.558h4.811c.58 0 .936-.09 1.159-.312.178-.223.311-.58.311-1.07 0-.49-.089-.846-.267-1.113-.178-.267-.579-.356-1.158-.356H44.422c-.936 0-1.604.222-2.005.668-.4.445-.624 1.203-.624 2.227v7.039c0 1.648 0 3.073-.044 4.232-.045 1.202-.09 2.227-.178 3.162a16.9 16.9 0 0 1-.401 2.406c-.178.713-.401 1.336-.668 1.96-.134.312-.268.624-.357.847-.089.267-.133.49-.133.668 0 .222.044.4.178.579.089.178.267.356.49.49.4.267.802.356 1.158.267.356-.044.713-.4 1.025-1.069a15.54 15.54 0 0 0 .89-2.54c.223-.89.446-1.915.58-2.984.133-1.114.222-2.272.267-3.608.045-1.292.09-2.762.09-4.321V6.84c0-.311.044-.49.133-.579a.404.404 0 0 1 .312-.133h6.325c-.044.089-.089.133-.089.222a.34.34 0 0 0-.089.223 11.556 11.556 0 0 1-.846 1.47l-1.782.045zm.4 14.121c.223-.579.313-1.024.268-1.38-.045-.357-.312-.58-.802-.803-.445-.178-.802-.222-1.069-.044-.267.178-.535.49-.713.98-.178.49-.356.935-.49 1.292a7.247 7.247 0 0 1-.49 1.024 27.49 27.49 0 0 1-.579.98c-.223.357-.445.713-.713 1.159-.312.49-.49.935-.445 1.291.044.357.178.669.49.936.4.312.757.4 1.114.267.356-.133.668-.4.935-.802.49-.801.98-1.648 1.426-2.45.4-.802.757-1.603 1.069-2.45zm6.95-9.711h-6.95v-1.292c0-.223.045-.312.09-.356a.478.478 0 0 1 .267-.09h6.148c.267 0 .4.134.4.446l.045 1.292zm0 3.875c0 .357-.134.535-.4.535h-6.148c-.268 0-.401-.178-.401-.535v-1.336h6.95v1.336zm3.475 8.598a23.753 23.753 0 0 0-.624-1.158c-.178-.312-.4-.668-.579-.98-.178-.312-.4-.624-.624-.98-.222-.312-.49-.713-.757-1.114-.312-.445-.668-.668-1.07-.713-.355-.044-.712.09-.98.401-.177.178-.311.357-.356.58-.044.178-.089.4-.044.579 0 .178.089.356.134.534.089.178.178.312.267.49.223.312.445.624.624.891.178.267.356.58.579.891.178.312.356.624.579.98.222.356.4.713.623 1.158.268.535.535.847.802.98.268.134.624.09 1.025-.089.49-.223.713-.534.757-.935.09-.49-.044-.98-.356-1.515z" fill="#4B4B4B"/><rect fill="url(#ba)" x="67" width="70.32" height="31" rx="3"/><path d="M91.77 9.246c1.387-.312 2.201-.511 2.444-.598.312-.156.637-.234.975-.234.338 0 .819.173 1.443.52.624.347.936.615.936.806 0 .104-.108.243-.325.416a1.933 1.933 0 0 0-.533.702c-.139.295-.286.84-.442 1.638-.33 1.733-.71 2.6-1.144 2.6-.156 0-.32-.134-.494-.403-.173-.269-.26-.498-.26-.689 0-.19.074-.446.221-.767.147-.32.286-.858.416-1.612.13-.754.195-1.261.195-1.521 0-.433-.295-.65-.884-.65-.225 0-1.083.139-2.574.416l-.078 1.326c.52-.121.962-.182 1.326-.182.485 0 .728.095.728.286 0 .07-.074.147-.221.234-.147.087-.776.243-1.885.468 0 .33-.017.728-.052 1.196.78-.156 1.304-.234 1.573-.234.269 0 .464.026.585.078.121.052.182.113.182.182 0 .26-.797.52-2.392.78-.07 1.161-.139 1.842-.208 2.041-.07.2-.16.299-.273.299-.113 0-.23-.182-.351-.546-.121-.364-.165-.901-.13-1.612-.33.035-.624.052-.884.052-.624 0-.936-.113-.936-.338 0-.156.173-.247.52-.273.347-.026.789-.091 1.326-.195 0-.225.017-.633.052-1.222-.399.07-.732.104-1.001.104-.269 0-.511-.026-.728-.078-.217-.052-.325-.139-.325-.26s.234-.212.702-.273c.468-.06.927-.152 1.378-.273l.078-1.378-3.042.598c.295 1.872.442 3.44.442 4.706 0 .295-.026.494-.078.598a.269.269 0 0 1-.26.156c-.121 0-.256-.06-.403-.182a1.22 1.22 0 0 1-.351-.533 2.044 2.044 0 0 1-.13-.715l.026-.728c0-.572-.104-1.244-.312-2.015-.208-.771-.394-1.265-.559-1.482-.165-.217-.247-.368-.247-.455 0-.19.126-.286.377-.286s.585.095 1.001.286a40.088 40.088 0 0 0 3.588-.572c.017-.399.026-.962.026-1.69-.676.104-1.196.156-1.56.156-.364 0-.71-.048-1.04-.143-.33-.095-.494-.208-.494-.338 0-.13.19-.212.572-.247a40.273 40.273 0 0 0 2.522-.416c-.052-1.265-.217-2.106-.494-2.522a.689.689 0 0 1-.104-.338c0-.19.13-.286.39-.286s.62.095 1.079.286c.46.19.689.416.689.676 0 .087-.017.19-.052.312-.139.26-.243.78-.312 1.56 1.075-.277 1.777-.416 2.106-.416.33 0 .607.039.832.117.225.078.338.169.338.273 0 .104-.06.204-.182.299-.121.095-.46.221-1.014.377-.555.156-1.283.312-2.184.468-.017.416-.06.98-.13 1.69zm3.692-4.836c.832 0 1.469.178 1.911.533.442.355.663.802.663 1.339 0 .347-.195.52-.585.52-.39 0-.732-.139-1.027-.416-.295-.277-.615-.59-.962-.936-.347-.347-.52-.607-.52-.78 0-.173.173-.26.52-.26zm-12.506 6.968c.572-.243 1.057-.364 1.456-.364s.771.052 1.118.156c.347.104.52.247.52.429s-.316.368-.949.559c-.633.19-1.356.373-2.171.546-.104 3.83-.156 5.91-.156 6.24 0 4.212-.364 6.318-1.092 6.318-.243 0-.45-.316-.624-.949-.173-.633-.26-1.083-.26-1.352 0-.269.091-.793.273-1.573.182-.78.347-1.976.494-3.588.147-1.612.23-3.224.247-4.836-1.473.312-2.422.468-2.847.468-.425 0-.85-.065-1.274-.195-.425-.13-.637-.256-.637-.377s.208-.208.624-.26a28.62 28.62 0 0 0 4.134-.832c-.017-1.803-.078-3.025-.182-3.666s-.282-1.118-.533-1.43c-.251-.312-.377-.555-.377-.728 0-.243.126-.364.377-.364s.71.16 1.378.481c.667.32 1.001.637 1.001.949 0 .104-.035.251-.104.442-.19.52-.33 1.829-.416 3.926zm11.856 4.966a177.8 177.8 0 0 0 2.405-.429 7.286 7.286 0 0 1 1.365-.117c.503 0 .945.108 1.326.325.381.217.572.429.572.637 0 .347-.563.52-1.69.52-.277 0-.568-.009-.871-.026a19.54 19.54 0 0 0-1.092-.026c-.425 0-1.096.026-2.015.078.07 1.23.165 2.414.286 3.549.121 1.135.182 1.868.182 2.197 0 .97-.212 1.807-.637 2.509-.425.702-.789 1.053-1.092 1.053-.303 0-.524-.121-.663-.364-.45-.71-1.04-1.456-1.768-2.236-.156-.173-.234-.295-.234-.364 0-.07.052-.104.156-.104.104 0 .373.052.806.156.433.104.784.156 1.053.156.269 0 .446-.074.533-.221.087-.147.156-.702.208-1.664.052-.962.078-1.82.078-2.574 0-.754-.026-1.417-.078-1.989-2.652.312-4.827.676-6.526 1.092-.97.243-1.63.364-1.976.364-.347 0-.702-.091-1.066-.273-.364-.182-.546-.347-.546-.494 0-.147.26-.23.78-.247 1.04-.035 4.117-.46 9.23-1.274-.07-.433-.165-.72-.286-.858-.225-.243-.338-.45-.338-.624 0-.173.147-.26.442-.26.295 0 .624.07.988.208.364.139.546.347.546.624a.776.776 0 0 1-.039.247c-.026.078-.039.221-.039.429zm-3.77 4.316c0 .26-.07.52-.208.78-.139.26-.308.39-.507.39-.2 0-.412-.139-.637-.416-.225-.277-.498-.71-.819-1.3-.32-.59-.481-.958-.481-1.105 0-.147.087-.221.26-.221.173 0 .615.195 1.326.585.71.39 1.066.819 1.066 1.287zm24.804-14.716c0 .33-.087.594-.26.793a.84.84 0 0 1-.663.299c-.269 0-.507-.121-.715-.364a22.156 22.156 0 0 1-.962-1.261c-.433-.598-.65-.975-.65-1.131 0-.156.156-.234.468-.234.815 0 1.482.173 2.002.52.52.347.78.806.78 1.378zm-7.436 2.418c.71 0 2.687-.195 5.928-.585 3.241-.39 5.079-.641 5.512-.754.433-.113.71-.169.832-.169.347 0 .897.299 1.651.897.754.598 1.131 1.07 1.131 1.417s-.225.529-.676.546c-1.144.035-2.089.234-2.834.598-.225.104-.39.156-.494.156-.104 0-.156-.043-.156-.13 0-.087.052-.208.156-.364.52-.832.78-1.36.78-1.586 0-.225-.178-.338-.533-.338-.355 0-1.46.091-3.315.273-1.855.182-3.41.377-4.667.585-1.257.208-2.084.312-2.483.312s-.685-.009-.858-.026a11.9 11.9 0 0 1-.702 1.703c-.312.633-.555 1.036-.728 1.209-.173.173-.338.26-.494.26-.399 0-.598-.416-.598-1.248 0-.555.156-1.014.468-1.378.139-.173.312-.455.52-.845a8.46 8.46 0 0 0 .507-1.131c.13-.364.286-.546.468-.546.182 0 .377.381.585 1.144zm6.864 7.462c2.67 1.404 4.684 2.34 6.045 2.808 1.36.468 3.09.84 5.187 1.118.433.052.65.156.65.312 0 .087-.074.169-.221.247-.147.078-.81.234-1.989.468s-1.993.351-2.444.351c-.45 0-.819-.039-1.105-.117-.286-.078-.62-.256-1.001-.533-2.583-1.872-4.507-3.19-5.772-3.952-1.647 1.508-3.163 2.687-4.55 3.536l.806.468c.919-.017 1.976-.117 3.172-.299 1.196-.182 1.92-.32 2.171-.416.251-.095.429-.143.533-.143.295 0 .862.251 1.703.754.84.503 1.261.836 1.261 1.001 0 .165-.087.334-.26.507-.919.85-1.378 1.421-1.378 1.716 0 .173.121.364.364.572.156.139.234.286.234.442 0 .156-.2.277-.598.364-.399.087-2.609.19-6.63.312-.07.537-.139.893-.208 1.066-.07.173-.186.26-.351.26-.165 0-.334-.152-.507-.455a2.033 2.033 0 0 1-.26-1.027c0-2.27-.251-3.84-.754-4.706-1.248.71-2.444 1.257-3.588 1.638-1.144.381-1.993.572-2.548.572-.139 0-.208-.039-.208-.117 0-.078.165-.186.494-.325 3.935-1.63 7.271-3.779 10.01-6.448a59.9 59.9 0 0 0-2.808-1.56c-.78.641-1.404 1.088-1.872 1.339-.468.251-.758.377-.871.377-.113 0-.169-.052-.169-.156 0-.104.139-.269.416-.494 1.179-.97 2.067-1.876 2.665-2.717.598-.84.897-1.564.897-2.171a1.25 1.25 0 0 0-.052-.39.855.855 0 0 1-.052-.26c0-.225.121-.338.364-.338s.611.147 1.105.442c.494.295.741.52.741.676 0 .087-.165.32-.494.702-.33.381-.563.659-.702.832.503.017 1.105-.065 1.807-.247s1.209-.368 1.521-.559c.312-.19.555-.286.728-.286.173 0 .516.178 1.027.533.511.355.767.628.767.819 0 .19-.156.381-.468.572-.312.19-.65.507-1.014.949-.364.442-.962 1.096-1.794 1.963zm-1.196-.624c.59-.659 1.036-1.226 1.339-1.703.303-.477.455-.767.455-.871 0-.243-.173-.32-.52-.234-.936.243-1.625.364-2.067.364-.442 0-.776-.052-1.001-.156-.347.433-.676.797-.988 1.092 1.023.572 1.95 1.075 2.782 1.508zm-2.652 9.36c2.53-.225 3.987-.412 4.368-.559.381-.147.68-.555.897-1.222.217-.667.325-1.157.325-1.469 0-.312-.234-.468-.702-.468-.641 0-2.349.165-5.122.494l.234 3.224z" fill="#FFF"/></g></svg><svg width="19" height="19" viewBox="0 0 19 19" id="icon_ic_back_top"><path d="M9.351 3.447L.694 11.815h4.913l-.043 6.853h7.553v-6.874l5.042-.065-8.808-8.282zM.035.035h18.633v2.747H.035V.035z" fill="#9C9C9C" fill-rule="evenodd"/></svg><svg width="13" height="12" viewBox="0 0 13 12" id="icon_ic_comment"><defs><path d="M237 7.998c0-1.104.894-1.998 2.003-1.998h8.994c1.106 0 2.003.9 2.003 1.998v5.76a1.996 1.996 0 0 1-1.993 1.997h.135c-1.1 0-2.625.63-3.405 1.407l.214-.213a1.996 1.996 0 0 1-2.82 0l.214.213c-.777-.777-2.3-1.407-3.4-1.407h.047c-1.1 0-1.992-.9-1.992-1.998v-5.76z" id="sa"/><mask id="sb" x="0" y="0" width="13" height="11.532" fill="#fff"><use xlink:href="#sa"/></mask></defs><use mask="url(#sb)" xlink:href="#sa" transform="translate(-237 -6)" stroke-width="2" stroke="#9D9D9D" fill="none" fill-rule="evenodd"/></svg><svg width="5" height="10" viewBox="0 0 5 10" id="icon_ic_crumbs"><path d="M4.83 8.852L1.854 4.939 4.86 1.147c.257-.34.153-.797-.235-1.023-.386-.226-.91-.135-1.167.204L.142 4.53a.663.663 0 0 0-.001.82l3.285 4.32c.258.341.782.433 1.169.208a.719.719 0 0 0 .375-.617.666.666 0 0 0-.14-.408z" fill="#979797" fill-rule="evenodd"/></svg><svg width="20" height="20" viewBox="0 0 20 20" id="icon_ic_next"><path d="M10 20C4.477 20 0 15.523 0 10S4.477 0 10 0s10 4.477 10 10-4.477 10-10 10zm-1.83-6.148l2.976-3.913L8.14 6.147c-.257-.34-.153-.797.235-1.023.386-.226.91-.135 1.167.204l3.315 4.201c.189.248.19.57.001.82l-3.285 4.32c-.258.341-.782.433-1.169.208a.719.719 0 0 1-.375-.617c0-.141.044-.282.14-.408z" fill="#9D9D9D" fill-rule="evenodd"/></svg><svg width="20" height="20" viewBox="0 0 20 20" id="icon_ic_prev"><path d="M10 20c5.523 0 10-4.477 10-10S15.523 0 10 0 0 4.477 0 10s4.477 10 10 10zm1.83-6.148L8.854 9.939l3.005-3.792c.257-.34.153-.797-.235-1.023-.386-.226-.91-.135-1.167.204L7.142 9.53a.663.663 0 0 0-.001.82l3.285 4.32c.258.341.782.433 1.169.208a.719.719 0 0 0 .375-.617.666.666 0 0 0-.14-.408z" fill="#9D9D9D" fill-rule="evenodd"/></svg><svg width="15" height="15" viewBox="0 0 15 15" id="icon_ic_search"><path d="M10.688 10.078a6 6 0 1 0-.943.943l3.784 3.784a.665.665 0 0 0 .942 0 .667.667 0 0 0 0-.943l-3.783-3.784zM6 11a4.667 4.667 0 1 1 0-9.333A4.667 4.667 0 0 1 6 11z" fill="#FFF" fill-rule="evenodd" fill-opacity=".5"/></svg><svg width="13" height="12" viewBox="0 0 13 12" id="icon_icon_ic_comment"><defs><path d="M359 95.998c0-1.104.894-1.998 2.003-1.998h8.994c1.106 0 2.003.9 2.003 1.998v5.76a1.996 1.996 0 0 1-1.993 1.997h.135c-1.1 0-2.625.63-3.405 1.407l.214-.213a1.996 1.996 0 0 1-2.82 0l.214.213c-.777-.777-2.3-1.407-3.4-1.407h.047c-1.1 0-1.992-.9-1.992-1.998v-5.76z" id="xa"/><mask id="xb" x="0" y="0" width="13" height="11.532" fill="#fff"><use xlink:href="#xa"/></mask></defs><use mask="url(#xb)" xlink:href="#xa" transform="translate(-359 -94)" stroke-width="2" stroke="#9D9D9D" fill="none" fill-rule="evenodd"/></svg><svg width="20" height="20" viewBox="0 0 20 20" id="icon_icon_ic_next"><path d="M10 20C4.477 20 0 15.523 0 10S4.477 0 10 0s10 4.477 10 10-4.477 10-10 10zm-1.83-6.148l2.976-3.913L8.14 6.147c-.257-.34-.153-.797.235-1.023.386-.226.91-.135 1.167.204l3.315 4.201c.189.248.19.57.001.82l-3.285 4.32c-.258.341-.782.433-1.169.208a.719.719 0 0 1-.375-.617c0-.141.044-.282.14-.408z" fill="#9D9D9D" fill-rule="evenodd"/></svg><svg width="20" height="20" viewBox="0 0 20 20" id="icon_icon_ic_prev"><path d="M10 20c5.523 0 10-4.477 10-10S15.523 0 10 0 0 4.477 0 10s4.477 10 10 10zm1.83-6.148L8.854 9.939l3.005-3.792c.257-.34.153-.797-.235-1.023-.386-.226-.91-.135-1.167.204L7.142 9.53a.663.663 0 0 0-.001.82l3.285 4.32c.258.341.782.433 1.169.208a.719.719 0 0 0 .375-.617.666.666 0 0 0-.14-.408z" fill="#9D9D9D" fill-rule="evenodd"/></svg></defs></svg>        <val data-name="user_follow_url" data-value="/action/user/follow"></val>
    <val data-name="user_unfollow_url" data-value="/action/user/unfollow"></val>
    <val data-name="user_sendmsg_url" data-value="/action/msg/send"></val>
    <val data-name="user_update_signature_url" data-value="/action/profile/update_user_signature"></val>

    <val data-name="classification" data-value="0"></val>

        <val data-name="g_user_login" data-value="false"></val>
    
    <val data-name="recommend_blog_list_page" data-value=""></val>

    <val data-name="is_owner" data-value=""></val>
    <header class="header-navbar">
    <div class="box top-banner">
        <div class="box vertical box-aw">
            <a href="../www.oschina.net/index.html" class="osc-logo"></a>
            <div class="menus sm-hide">
                <a class="menu-item" href="../www.oschina.net/index.html">首页</a>
                <div class="menu-item menu-drop">
                    <a href="https://www.oschina.net/project" class="project">
                        开源项目
                        <i class="icon-svg icon-arr-down-white"></i>
                    </a>
                    <div class="menu-drop-down">
                        <ul class="drop-list">
                            <li><a href="https://www.oschina.net/project/zh">国产开源项目</a></li>
                            <li><a href="https://www.oschina.net/project/tags">项目分类</a></li>
                            <li><a href="https://www.oschina.net/project/list?sort=time">最新收录项目</a></li>
                            <li class="split"></li>
                            <li><a href="https://www.oschina.net/project/lang/19/java">Java 开源软件</a></li>
                            <li><a href="https://www.oschina.net/project/lang/194/csharp">C# 开源软件</a></li>
                            <li><a href="https://www.oschina.net/project/lang/22/php">PHP 开源软件</a></li>
                            <li><a href="https://www.oschina.net/project/lang/21/c">C/C++ 开源软件</a></li>
                            <li><a href="https://www.oschina.net/project/lang/26/ruby">Ruby 开源软件</a></li>
                            <li><a href="https://www.oschina.net/project/lang/25/python">Python 开源软件</a></li>
                            <li><a href="https://www.oschina.net/project/lang/358/go">Go开源软件</a></li>
                            <li><a href="https://www.oschina.net/project/lang/28/javascript">JS开源软件</a></li>
                        </ul>
                    </div>
                </div>
                <div class="box menu-item menu-drop">
                    <a href="https://www.oschina.net/question" class="question">
                        问答
                        <i class="icon-svg icon-arr-down-white"></i>
                    </a>
                    <div class="menu-drop-down">
                        <ul class="drop-list">
                            <li><a href="https://www.oschina.net/question?catalog=1"> 技术问答</a></li>
                            <li><a href="https://www.oschina.net/question?catalog=2"> 技术分享</a></li>
                            <li><a href="https://www.oschina.net/question?catalog=3"> IT大杂烩</a></li>
                            <li><a href="https://www.oschina.net/question?catalog=100"> 职业生涯</a></li>
                            <li><a href="https://www.oschina.net/question?catalog=4"> 站务/建议</a></li>
                            <li><a href="https://www.oschina.net/alipay"> 支付宝专区</a></li>
                            <li><a href="https://www.oschina.net/mopaas"> MoPaaS专区</a></li>
                            <li><a href="https://www.oschina.net/hardware"> 开源硬件专区</a></li>
                        </ul>
                    </div>
                </div>
                <a href="https://www.oschina.net/tweets" class="menu-item tweets">动弹</a>
                <a href="https://www.oschina.net/blog" class="menu-item blog">博客</a>
                <a href="https://www.oschina.net/translate" class="menu-item tran">翻译</a>
                <a href="https://www.oschina.net/news" class="menu-item news">资讯</a>
                <div class="menu-item menu-drop">
                    <a href="https://www.oschina.net/android" class="mobile">
                        专题
                        <i class="icon-svg icon-arr-down-white"></i>
                    </a>
                    <div class="menu-drop-down">
                        <ul class="drop-list drop-list-inline">
                            <li><a href="https://www.oschina.net/event/ych" class="font-red">源创会</a> <a
                                    href="https://www.oschina.net/video">视频</a></li>
                            <li><a href="https://www.oschina.net/question/tag/%E9%AB%98%E6%89%8B%E9%97%AE%E7%AD%94">高手问答</a> <a
                                    href="https://www.oschina.net/question/tag/%E5%BC%80%E6%BA%90%E8%AE%BF%E8%B0%88">访谈</a></li>
                            <li><a href="https://www.oschina.net/question/tag/%E5%BC%80%E6%BA%90%E5%91%A8%E5%88%8A">周刊</a> <a
                                    href="https://my.oschina.net/xxiaobian/blog?catalog=547834">乱弹</a></li>
                            <li><a href="https://www.oschina.net/company">公司开源导航页</a></li>
                        </ul>
                        <div class="split"></div>
                        <ul class="drop-list mobile">
                            <li class="android"><a href="https://www.oschina.net/android">Android开发专区</a></li>
                            <li class="ios"><a href="https://www.oschina.net/ios/home">iOS开发专区</a></li>
                            <li class="ios"><a href="https://www.oschina.net/ios/codingList">iOS代码库</a></li>
                            <li class="wp7"><a href="https://www.oschina.net/wp">Windows Phone</a></li>
                        </ul>
                    </div>
                </div>
                <a href="https://www.oschina.net/event" class="menu-item event">活动</a>
                <a href="https://job.oschina.net/" class="menu-item event">招聘</a>
            </div>

        </div>
        <div class="box-fr user-bar">
            <div class="box user-info">
                                                    [ <a href='../www.oschina.net/home/login-goto_page=https---static.oschina.net-blog.html'>登录</a> | <a
                        href="https://www.oschina.net/home/reg">注册</a> ]
                            </div>
        </div>
    </div>
</header>
<!-- 此script用于百度统计工具-->
<script>
    var _hmt = _hmt || [];
    (function() {
        var hm = document.createElement("script");
        hm.src = "//hm.baidu.com/hm.js?a411c4d1664dd70048ee98afe7b28f0b";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
    })();
</script>
            <div data-traceid="博客专区" data-tracepid="page_pv" style="display: none"></div>
    <section class="p-blog">

        <header class="box sec-header blog-banner">
            <div class="box banner-box vertical">
                <div class="box-aw">
                    <a href="https://www.oschina.net/blog" class="sec-title" style="display:inline-block;">
                        <svg width="135" height="31" viewBox="0 0 135 31" class="svg-icon_blog_logo-dims">
							<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#icon_blog_logo"></use>
					    </svg>
                    </a>
                </div>
                <div class="box-fr">
                        <form id="searchForm" action='https://www.oschina.net/search' class="box vertical sec-search" autocomplete="off">
                            <input type='hidden' name='scope' value='blog'>
                            <input class="search-text" type="text" name='q' placeholder="博客、软件、分享、代码">
                            <span class="ic-search box vertical" onClick="page.search()"></span>
                        </form>
                </div>
            </div>
        </header>
        <article class="box blog-content">

            <nav class="box-fr blog-nav-wrapper">

<ul class="blog-nav">
    <li>
        <a href="https://www.oschina.net/blog" >
            <div class="box vertical nav-menu active">
                <div class="box vertical box-aw">
                    <span class="ic ic-menu">
                        <svg width="20" height="20" viewBox="0 0 20 20">
                            <use  xlink:href="#blog_nav_icon_ic_type_all"></use>
                        </svg>
                    </span>
                    <span class="nm-name">全部</span>
                </div>
            </div>
        </a>
    </li>

    
                        <li>
                <a href="https://www.oschina.net/blog?classification=428602" title="移动开发" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_mobile"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">移动开发</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="https://www.oschina.net/blog?classification=428612" title="前端开发" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_frontend"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">前端开发</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="https://www.oschina.net/blog?classification=428640" title="服务端开发/管理" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_server"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">服务端开发/管理</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="https://www.oschina.net/blog?classification=429511" title="游戏开发" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_game"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">游戏开发</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="https://www.oschina.net/blog?classification=428609" title="编程语言" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_language"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">编程语言</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="https://www.oschina.net/blog?classification=428610" title="数据库" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_database"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">数据库</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="https://www.oschina.net/blog?classification=428611" title="企业开发" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_enterprise"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">企业开发</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="https://www.oschina.net/blog?classification=428647" title="图像/多媒体" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_multimedia"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">图像/多媒体</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="../www.oschina.net/blog-classification=428613.html" title="系统运维" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_maintain"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">系统运维</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="../www.oschina.net/blog-classification=5593654.html" title="大数据" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_misc"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">大数据</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="../www.oschina.net/blog-classification=428638.html" title="软件工程" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_software"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">软件工程</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="../www.oschina.net/blog-classification=428639.html" title="云计算" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_cloud"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">云计算</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="../www.oschina.net/blog-classification=430884.html" title="开源硬件" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_hardware"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">开源硬件</span>
                        </div>
                    </div>
                </a>
            </li>
                    <li>
                <a href="../www.oschina.net/blog-classification=430381.html" title="其他类型" >
                    <div class="box vertical nav-menu ">
                        <div class="box vertical box-aw">
                                                                                        <span class="ic ic-menu">
                                    <svg width="20" height="20" viewBox="0 0 20 20">
                                        <use xlink:href="#blog_nav_icon_ic_type_misc"></use>
                                    </svg>
                                </span>
                                                        <span class="nm-name">其他类型</span>
                        </div>
                    </div>
                </a>
            </li>
            </ul>

<div class="weekly">
    <h1>本周最受欢迎</h1>
    <div class="img-wrapper">
                    <a href="https://my.oschina.net/xxiaobian" title="小小编辑" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/714/1428332_50.jpg?t=1400110163000" alt="小小编辑">
                </span>
                <div class="box-aw">
                    <div class="title">小小编辑</div>
                    <div class="post">
                                                                                            </div>
                </div>
            </a>

            
                    <a href="https://my.oschina.net/editorial-story" title="编辑部的故事" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/1459/2918182_50.jpeg?t=1484105851000" alt="编辑部的故事">
                </span>
                <div class="box-aw">
                    <div class="title">编辑部的故事</div>
                    <div class="post">
                                                                            开源中国
                                                                            运营/编辑
                                            </div>
                </div>
            </a>

            
                    <a href="https://my.oschina.net/Birdofprey" title="ak_birdofprey" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/87/174123_50.gif?t=1414574139000" alt="ak_birdofprey">
                </span>
                <div class="box-aw">
                    <div class="title">ak_birdofprey</div>
                    <div class="post">
                                                                            陕西西安铁路局信息技术所
                                                                            系统管理员
                                            </div>
                </div>
            </a>

            
                    <a href="https://my.oschina.net/u/1859679" title="wier" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/929/1859679_50.jpeg?t=1483774857000" alt="wier">
                </span>
                <div class="box-aw">
                    <div class="title">wier</div>
                    <div class="post">
                                                                            腾讯
                                                                            程序员
                                            </div>
                </div>
            </a>

            
                    <a href="https://my.oschina.net/mumu" title="大漠穷秋" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/29/59456_50.jpeg?t=1485158372000" alt="大漠穷秋">
                </span>
                <div class="box-aw">
                    <div class="title">大漠穷秋</div>
                    <div class="post">
                                                                            Google开发技术推广部
                                                                            架构师
                                            </div>
                </div>
            </a>

            
                    <a href="https://my.oschina.net/xpbob" title="xpbob" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/731/1463652_50.png?t=1406635909000" alt="xpbob">
                </span>
                <div class="box-aw">
                    <div class="title">xpbob</div>
                    <div class="post">
                                                                                            </div>
                </div>
            </a>

            
                    <a href="https://my.oschina.net/gemron" title="GuoMengYue" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/111/223115_50.jpg?t=1372831360000" alt="GuoMengYue">
                </span>
                <div class="box-aw">
                    <div class="title">GuoMengYue</div>
                    <div class="post">
                                                                            东方所
                                                                            高级程序员
                                            </div>
                </div>
            </a>

            
                    <a href="https://my.oschina.net/Seas0n" title="Seas0n_" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/1196/2393516_50.jpg?t=1433924451000" alt="Seas0n_">
                </span>
                <div class="box-aw">
                    <div class="title">Seas0n_</div>
                    <div class="post">
                                                                            卓诚科技
                                                                            前端工程师
                                            </div>
                </div>
            </a>

            
                    <a href="https://my.oschina.net/Parser" title="Parser7" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/1156/2313487_50.png?t=1425729578000" alt="Parser7">
                </span>
                <div class="box-aw">
                    <div class="title">Parser7</div>
                    <div class="post">
                                                                                                    程序员
                                            </div>
                </div>
            </a>

            
                    <a href="https://my.oschina.net/langxSpirit" title="斯武丶风晴" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/77/155593_50.jpg?t=1437621331000" alt="斯武丶风晴">
                </span>
                <div class="box-aw">
                    <div class="title">斯武丶风晴</div>
                    <div class="post">
                                                                                                    高级程序员
                                            </div>
                </div>
            </a>

            
            </div>
</div>


<div class="weekly">
    <h1>推荐博主</h1>
    <div class="img-wrapper">
                    <a href="https://my.oschina.net/u/2395563/blog" title="aresn" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/1197/2395563_50.jpeg?t=1485042445000" alt="aresn">
                </span>
                <div class="box-aw">
                    <div class="title">aresn</div>
                    <div class="post">
                                                                                            </div>
                </div>
            </a>

            
                    <a href="https://my.oschina.net/gitosc/blog" title="开源中国码云" class="box justify">
                <span class="box-fl">
                    <img data-delay="https://static.oschina.net/uploads/user/1133/2267325_50.jpeg?t=1483329491000" alt="开源中国码云">
                </span>
                <div class="box-aw">
                    <div class="title">开源中国码云</div>
                    <div class="post">
                                                                                            </div>
                </div>
            </a>

            
            </div>
</div>

<div class="billboards" id="donation_tops">
    <h1>赏金榜</h1>

</div>
<div class="box vertical billboard hide" id="billboard-template">
    <div class="box vertical box-fl bb-wrapper">
        <a target="_blank"><img></a>
    </div>
    <div class="box-aw">
        <a target="_blank"><h2 class="bb-name"></h2></a>
        <span class="bb-desc"></span>
    </div>
</div>




</nav>
            
<section class="box-aw blog-section-wrapper">



            
            
            
            
            
            
            
            
            
            
            
            
            
            
    
    
<header class="recommend-tops">
    <div class="toolbox box vertical">
        <div class="box-aw">
            <h1>精彩阅读</h1>
        </div>
        <div class="box vertical box-fr">
            <a id="slickPrev">
                <svg width="20" height="20" viewBox="0 0 20 20" class="svg-icon_ic_prev-dims">
                    <use xlink:href="#icon_ic_prev"></use>
                </svg>
            </a>
            <a id="slickNext">
                <svg width="20" height="20" viewBox="0 0 20 20" class="svg-icon_ic_next-dims">
                    <use xlink:href="#icon_ic_next"></use>
                </svg>
            </a>
        </div>
    </div>
    <div id="slick-recommend" class="recommend-wrapper wrap">
                                <div class="recommend">
            <a href="https://my.oschina.net/rivues/blog/824066" target="_self" style="display:block;">
                <img class="cover" data-delay="https://static.oschina.net/uploads/img/201612/30113219_7dZm.png" alt="Elasticsearch 实现多维数据分析（OLAP）">
                <h2 class="recommend-title">Elasticsearch 实现多维数据分析（OLAP）</h2>
            </a>
            <div class="summary box vertical">
                <div class="box vertical box-aw">
                    <a class="box vertical" href="https://my.oschina.net/rivues" target="_blank">
                        <img class="recommend-person" data-delay="https://static.oschina.net/uploads/user/55/111391_50.jpg" alt="R3商业智能">
                        <span>R3商业智能</span>
                    </a>
                </div>
                <div class="box vertical box-fr">
                    <a  class="box vertical"  href="https://my.oschina.net/rivues/blog/824066#comment-list" target="_self">
                        <svg width="13" height="12" viewBox="0 0 13 12" class="svg-icon_ic_comment-dims">
							<use xlink:href="#icon_ic_comment"></use>
					    </svg>
                        <span>10</span>
                    </a>
                </div>
            </div>
        </div>
                                <div class="recommend" data-traceid="blog_area_top_recommend_ad" data-tracepid="blog_area_list">
    <a href="https://zb.oschina.net/quick/i-need-a-mini-program" target="_self" style="display:block;">
        <img class="cover" data-delay="https://static.oschina.net/uploads/space/2017/0110/093104_zugA_2982602.gif">
        <h2 class="recommend-title">开源中国众包帮你快速开发优质微信小程序！</h2>
    </a>
    <div class="summary box vertical">
        <div class="box vertical box-aw">
            <a class="box vertical" href="https://zb.oschina.net/quick/i-need-a-mini-program" target="_blank">
                <img class="recommend-person" data-delay="https://static.oschina.net/uploads/space/2016/1220/104307_X6tG_2982602.jpg">
                <span>众包店铺</span>
            </a>
        </div>
        <div class="box vertical box-fr">
            <span style="line-height: 20px;display: block;width: 36px;text-align: center;color: #fff;border-radius: 2px;background: #cecece;font-size: .75rem;">广告</span>
        </div>
    </div>
</div>
                        <div class="recommend">
            <a href="https://my.oschina.net/u/3023401/blog/824263" target="_self" style="display:block;">
                <img class="cover" data-delay="https://static.oschina.net/uploads/img/201612/30113146_mOGJ.png" alt="打造 Linux 回收站功能">
                <h2 class="recommend-title">打造 Linux 回收站功能</h2>
            </a>
            <div class="summary box vertical">
                <div class="box vertical box-aw">
                    <a class="box vertical" href="https://my.oschina.net/u/3023401" target="_blank">
                        <img class="recommend-person" data-delay="https://static.oschina.net/uploads/user/1511/3023401_50.jpeg?t=1479262299000" alt="IT--小哥">
                        <span>IT--小哥</span>
                    </a>
                </div>
                <div class="box vertical box-fr">
                    <a  class="box vertical"  href="https://my.oschina.net/u/3023401/blog/824263#comment-list" target="_self">
                        <svg width="13" height="12" viewBox="0 0 13 12" class="svg-icon_ic_comment-dims">
							<use xlink:href="#icon_ic_comment"></use>
					    </svg>
                        <span>10</span>
                    </a>
                </div>
            </div>
        </div>
                                    <div class="recommend">
            <a href="https://my.oschina.net/u/3023401/blog/823849" target="_self" style="display:block;">
                <img class="cover" data-delay="https://static.oschina.net/uploads/img/201612/30113202_mOmA.png" alt="一次线上 redis 报障处理过程">
                <h2 class="recommend-title">一次线上 redis 报障处理过程</h2>
            </a>
            <div class="summary box vertical">
                <div class="box vertical box-aw">
                    <a class="box vertical" href="https://my.oschina.net/u/3023401" target="_blank">
                        <img class="recommend-person" data-delay="https://static.oschina.net/uploads/user/1511/3023401_50.jpeg?t=1479262299000" alt="IT--小哥">
                        <span>IT--小哥</span>
                    </a>
                </div>
                <div class="box vertical box-fr">
                    <a  class="box vertical"  href="https://my.oschina.net/u/3023401/blog/823849#comment-list" target="_self">
                        <svg width="13" height="12" viewBox="0 0 13 12" class="svg-icon_ic_comment-dims">
							<use xlink:href="#icon_ic_comment"></use>
					    </svg>
                        <span>12</span>
                    </a>
                </div>
            </div>
        </div>
                                    <div class="recommend">
            <a href="https://my.oschina.net/u/3186519/blog/823156" target="_self" style="display:block;">
                <img class="cover" data-delay="https://static.oschina.net/uploads/img/201612/30113254_9QGG.png" alt="2017 年十大网页设计趋势">
                <h2 class="recommend-title">2017 年十大网页设计趋势</h2>
            </a>
            <div class="summary box vertical">
                <div class="box vertical box-aw">
                    <a class="box vertical" href="https://my.oschina.net/u/3186519" target="_blank">
                        <img class="recommend-person" data-delay="https://static.oschina.net/uploads/user/1593/3186519_50.jpg?t=1482921401000" alt="IT程序狮">
                        <span>IT程序狮</span>
                    </a>
                </div>
                <div class="box vertical box-fr">
                    <a  class="box vertical"  href="https://my.oschina.net/u/3186519/blog/823156#comment-list" target="_self">
                        <svg width="13" height="12" viewBox="0 0 13 12" class="svg-icon_ic_comment-dims">
							<use xlink:href="#icon_ic_comment"></use>
					    </svg>
                        <span>5</span>
                    </a>
                </div>
            </div>
        </div>
                                    <div class="recommend">
            <a href="https://my.oschina.net/xiaomaijiang/blog/822375" target="_self" style="display:block;">
                <img class="cover" data-delay="https://static.oschina.net/uploads/img/201612/30113310_1bFb.png" alt="混淆视听：用 Golang 来保护 Java 程序">
                <h2 class="recommend-title">混淆视听：用 Golang 来保护 Java 程序</h2>
            </a>
            <div class="summary box vertical">
                <div class="box vertical box-aw">
                    <a class="box vertical" href="https://my.oschina.net/xiaomaijiang" target="_blank">
                        <img class="recommend-person" data-delay="https://static.oschina.net/uploads/user/931/1862339_50.jpg?t=1471498818000" alt="小埋酱">
                        <span>小埋酱</span>
                    </a>
                </div>
                <div class="box vertical box-fr">
                    <a  class="box vertical"  href="https://my.oschina.net/xiaomaijiang/blog/822375#comment-list" target="_self">
                        <svg width="13" height="12" viewBox="0 0 13 12" class="svg-icon_ic_comment-dims">
							<use xlink:href="#icon_ic_comment"></use>
					    </svg>
                        <span>9</span>
                    </a>
                </div>
            </div>
        </div>
                </div>
</header>
    
    <div class="hide">
    <a href="../www.oschina.net/blog/topsOfRecommend.html">最新推荐</a>
    <a href="../www.oschina.net/blog/topsOfToday.html">今日热门</a>
    <a href="../www.oschina.net/blog/topsOfWeek.html">本周热门</a>
    <a href="../www.oschina.net/blog/topsOfDaily.html">每日一博</a>
    <a href="../www.oschina.net/blog/topsOfNew.html">最新文章</a>
</div>
<ul class="box blog-tabs">
    <li data-target="topsOfRecommend" blog-list-data-traceid="blog_area_tops_of_recommend" blog-list-data-tracepid="blog_area_list" class="tab active"><h1>最新推荐</h1></li>
    <li data-target="topsOfToday" blog-list-data-traceid="blog_area_tops_of_today" blog-list-data-tracepid="blog_area_list" class="tab"><h1>今日热门</h1></li>
    <li data-target="topsOfWeek" blog-list-data-traceid="blog_area_tops_of_week" blog-list-data-tracepid="blog_area_list" class="tab"><h1>本周热门</h1></li>
    <li data-target="topsOfDaily" blog-list-data-traceid="blog_area_tops_of_daily" blog-list-data-tracepid="blog_area_list" class="tab"><h1>每日一博</h1></li>
    <li data-target="topsOfNew" blog-list-data-traceid="blog_area_tops_of_new" blog-list-data-tracepid="blog_area_list" class="tab"><h1>最新文章</h1></li>
</ul>

<div id="topsOfRecommend" class="blog-list">
                                                        <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/didispace" style="display:block;">
            <img alt="程序猿DD" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1326/2653610_50.jpg?t=1456537598000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/didispace/blog/830942" class="sc overh blog-title-link" target='_blank'
               title="Spring Boot 1.5.x新特性：动态修改日志级别">
                <h2 class="blog-name sc text-ellipsis">Spring Boot 1.5.x新特性：动态修改日志级别</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">前天Spring Boot 1.5终于迎来了第一个RELEASE版本：1.5.0，但是由于[一个编译依赖问题](https://github.com/spring-projects/spring-boot/issues/8136)在第二天直接连击到了1.5.1。该版本的发布包含了超过320位贡献者的奉献、10000多次的代码提交。 每次Spring Boot版本更新所带来的新特性都是我们每个用户特别关注的。虽然其中不少特性可能对于大部分用户来说还不一定适用，但是作为基础知识的储备还是有一定的必要性。对于1.5.x版本的新特性列表读者可以直接查看官方博文：[《Spring Boot 1.5.1 released》](https://spring.io/blog/2017/01/30/spring-boot-1-5-1-released)来了解它们，本文不做这些概要性的介绍。在后续的一段时间内，本博客将会陆续介绍一些笔者关心且将会使用的关于Spring Boot 1.5.x中的一些新特性。 ## loggers端点 本文我们就来看看Spring Boot 1.5.x中引入的一个新的控制端点：`/loggers`，该端点将为我们提供动态修改Spring Boot应用日志级别的强大功能。该功能的使用非常简单，它依然延续了Spring Boot自动化配置的实现，所以只需要在引入了`spring-boot-starter-actuator`依赖的条件下就会自动开启该端点的功能（更多关于`spring-boot-starte...</section>
        <footer class="box vertical blog-footer-box">
            <span>程序猿DD</span>
            <span>发布于</span>
            <span>13小时前</span>
                        <span>阅读 341</span>
                                    <span>评论 2</span>
                                            </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/editorial-story" style="display:block;">
            <img alt="编辑部的故事" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1459/2918182_50.jpeg?t=1484105851000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/editorial-story/blog/830843" class="sc overh blog-title-link" target='_blank'
               title="2016 年回顾：版本帝 GitLab 发布了 12 个版本">
                <h2 class="blog-name sc text-ellipsis">2016 年回顾：版本帝 GitLab 发布了 12 个版本</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">让我们一起来回顾下 2016 年 GitLab 的一些更新。在 2016 年，GitLab 发布了 12 个新版本。这些版本包括主要的新功能，以及一些想法的实现。 1 月： GitLab 8.4版本 这是 GitLab 的第 50 个版本。 构建构件 增加了浏览器构建构件。从构建工件的输出结果,可用于提供二进制文件的软件,一个静态的编译内容网站,或测试覆盖检查器的结果。 文件查找器 介绍了一个来自于社区的文件搜索器，有助于 我们介绍了一个文件仪,加入了来自于社区的!有助于使用“模糊”搜索找到存储库中的任何文件。 弹性搜索 Elasticsearch ( EE Starte ) 改善存储库添加搜索企业版与Elasticsearch 起动器。使搜索项目的代码,问题,和合并请求更快和更有用。 2 月：GitLab 8.5 版本 Todos（待办事项） 此次版本引入了 Todos（待办事项），一个更有用的通知系统。 GitLab Geo（EE Premium） 同时发布了 GitLab Geo 的 alpha 版本。允许公司与各地的办事处 GitLab 实例镜像。世界各地的团队成员均可更快下载大型存储库。 GitLab 页面的自定义域和自定义 TLS 证书 GitLab 页面添加了对自定义域和自定义 TLS 证书的支持。 允许用户在自定义域上托管其静态网站，而不放弃 HTTPS 的增加的安全性。 虽然GitLab页面...</section>
        <footer class="box vertical blog-footer-box">
            <span>编辑部的故事</span>
            <span>发布于</span>
            <span>1天前</span>
                        <span>阅读 477</span>
                                    <span>评论 1</span>
                                            </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/mumu" style="display:block;">
            <img alt="大漠穷秋" class="blog-author" data-delay="https://static.oschina.net/uploads/user/29/59456_50.jpeg?t=1485158372000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/mumu/blog/830696" class="sc overh blog-title-link" target='_blank'
               title="【重要】让你的服务端支持HTML5的PushState模式">
                <h2 class="blog-name sc text-ellipsis">【重要】让你的服务端支持HTML5的PushState模式</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">这是一个非常常见的PushState问题，经常有人来问。 大家都知道，Angular2的路由默认使用了HTML5的PushState模式，这样URL里面就没有#号了，彻底解放了一些强迫症患者。这样一来，URL是好看多了，但是也带来了另一个问题，那就是需要配置一下服务端才能支持HTML5的这种PushState路径。 例如，对于以下URL路径： http://localhost:8080/NiceFish-Tomcat/posts/page/1 当你浏览器里面导航的时候，随意切换都没有问题，但是如果你按F5强制刷新，就会出现404。这是因为PushState模式下的URL里面没有#，浏览器会真的向服务端发起一个请求，而我们在服务端并没有对应于这个路径的资源。 所以，我们需要做一些配置来支持Angular的这种路由模式，以Tomcat为例，配置非常简单，只要在你的项目的web.xml里面加上以下配置就可以了：     &lt;error-page&gt;
        &lt;error-code&gt;404&lt;/error-code&gt;
        &lt;location&gt;/&lt;/location&gt;
    &lt;/error-page&gt; 这样一来，对于找不到资源的路径，Tomcat会全部重定向到根路径上去，这样Angular2就可以在前端自己处理请求的URL了。 对于其它类型的服务端，例如nginx/apache/IIS，请参考这篇文档：https://github.com/angular-ui/ui-router/wiki/Frequently...</section>
        <footer class="box vertical blog-footer-box">
            <span>大漠穷秋</span>
            <span>发布于</span>
            <span>3天前</span>
                        <span>阅读 905</span>
                                    <span>评论 4</span>
                                    <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/dingxuewen" style="display:block;">
            <img alt="丁学文" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1619/3238344_50.jpg?t=1485087946000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/dingxuewen/blog/830640" class="sc overh blog-title-link" target='_blank'
               title="CSS 学习笔记3 为文本添加样式">
                <h2 class="blog-name sc text-ellipsis">CSS 学习笔记3 为文本添加样式</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">--- 另发表于[Levi.Blog](https://dingxuewen.github.io/2017/01/28/CSS-Lesson3-%E4%B8%BA%E6%96%87%E6%9C%AC%E6%B7%BB%E5%8A%A0%E6%A0%B7%E5%BC%8F/)和[CSDN](http://blog.csdn.net/DingXue_wen/article/details/54767282) --- ## **为文本添加样式**   使用CSS可以修改文本的字体、大小、粗细、倾斜、行高、前景和背景颜色、间距和对齐方式，可以决定是否为文本添加下划线或删除线可以将文本转化为全部使用大写字母、全部使用小写字母或使用小型大写字母。 ### **选择字体系列**   设置字体的方法：在样式表中需要的选择器之后，输入`font-family: name;`，这里的`name`是首选字体的名称。 ```css /* 由于font-family是继承属性，而我们对body元素设置了Geneva字体，该样式会应用到其他元素。通过对h1和h2元素设置Gill Sans字体，覆盖了继承属性。代码中的字体名称可以用小写，如`font-family: geneva` */ body { font-family: Geneva; } h1,h2 { font-family: "Gill Sans"; } ```   虽然`font-family: name;`的属性是继承的，但是有几个元素不会继承父元素的字体设置，其中有表单的`select`、`textarea`和`input`元素。不过可以强制它们继承父元素的字体设置，代...</section>
        <footer class="box vertical blog-footer-box">
            <span>丁学文</span>
            <span>发布于</span>
            <span>4天前</span>
                        <span>阅读 90</span>
                                                <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                                        <div class="box item" data-traceid="blog_area_list_ad_1" data-tracepid="blog_area_list">
    <div class="box-fl">
        <a href="https://www.oschina.net/event/2216742" style="display:block;">
            <img class="blog-author" data-delay="https://static.oschina.net/uploads/space/2017/0109/155506_AL3c_2982602_thumb.png">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://www.oschina.net/event/2216742" class="sc overh blog-title-link" target="_blank" title="全球云计算开源峰会">
                <h2 class="blog-name sc text-ellipsis">“全球云计算开源峰会”将于2017年4月19日－20日在国家会议中心举行！</h2>
            </a>
            <div class="box-fr">
                <span style="line-height: 20px;display: block;width: 36px;text-align: center;color: #fff;border-radius: 2px;background: #cecece;font-size: .75rem;">广告</span>
            </div>
        </header>
        <section class="blog-brief text-gradient">近年来，云计算开源技术逐渐成为云计算发展的重要支撑和导向，改变了以往的信息技术进化模式，引领软件技术标准的发展和创新，深刻影响着整个信息技术产业的发展格局。为进一步探索我国云计算开源技术发展模式，加速云计算与各行业的深度融合，更好地发挥云计算在经济社会创新发展中的支撑和引领作用，促进我国云计算产业快速、健康发展。</section>
        <footer class="box vertical blog-footer-box">
            <span>云计算开源产业联盟</span>
        </footer>
    </div>
</div>
                        <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/1859679" style="display:block;">
            <img alt="wier" class="blog-author" data-delay="https://static.oschina.net/uploads/user/929/1859679_50.jpeg?t=1483774857000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/1859679/blog/830623" class="sc overh blog-title-link" target='_blank'
               title="关于B站除夕夜被攻击">
                <h2 class="blog-name sc text-ellipsis">关于B站除夕夜被攻击</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">早上醒来，被朋友发来的一个信息给震惊了，除夕夜B站被攻击。   选择在除夕夜爆出这个事情，想必是提前已经规划好了，要造成一定的影响。目前网上的谣言很多，有说欠薪资，有说B站营销等等。具体有什么目的，以及什么原因就不再评论，在真相没有出来之前，一切都是不靠谱的。   据官方更新的最新消息，1.27号18:20起开始遭受了大面积攻击。随后10:30,后台审核系统被攻击。据统计，此次遭受攻击 账号数约占总账号的1.8%，大部分是是L6和L5的账号，影响的只有节操值，账号和密码安全不会受到影响。   1、从官方公布的消息来看，目前管理端被黑入的可能性比较高。不过管理端已经有操作权限了，用户资料和密码是否已经外泄，这个不得而知了，我觉得概率还是很高的。另外管理端上说，管理端是否和主站采用一个库，因为不做物理隔绝，让主库暴露在外层，无论是内部操作还是外部操作，对主库都是又极高的危险。   2、密码的存储方式。我知道这是个极其简单又容易遗漏的事情，像往年爆出的用户密码被盗，多数都是明文的原因。若是明文存码，用户的资产后期会被洗劫和转移，这对主站和用户的伤害会很大。若是使用密文，是否采用MD5、SHA1等单向HASH加密，目前来看这种加密现在也...</section>
        <footer class="box vertical blog-footer-box">
            <span>wier</span>
            <span>发布于</span>
            <span>4天前</span>
                        <span>阅读 1974</span>
                                    <span>评论 10</span>
                                            </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/langxSpirit" style="display:block;">
            <img alt="斯武丶风晴" class="blog-author" data-delay="https://static.oschina.net/uploads/user/77/155593_50.jpg?t=1437621331000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/langxSpirit/blog/830620" class="sc overh blog-title-link" target='_blank'
               title="Java.I/O流编程一览笔录">
                <h2 class="blog-name sc text-ellipsis">Java.I/O流编程一览笔录</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">针对Java 标准IO的总结笔记。欢迎讨论。</section>
        <footer class="box vertical blog-footer-box">
            <span>斯武丶风晴</span>
            <span>发布于</span>
            <span>4天前</span>
                        <span>阅读 235</span>
                                    <span>评论 4</span>
                                    <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/Birdofprey" style="display:block;">
            <img alt="ak_birdofprey" class="blog-author" data-delay="https://static.oschina.net/uploads/user/87/174123_50.gif?t=1414574139000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/Birdofprey/blog/830608" class="sc overh blog-title-link" target='_blank'
               title="把你的Linux打扮的像个黑客屏幕">
                <h2 class="blog-name sc text-ellipsis">把你的Linux打扮的像个黑客屏幕</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">把你的Linux打扮的像个黑客屏幕 Gnu/Linux的好玩，真是有目共睹，世界上越来越多的用户已经使用和玩耍它很久啦。今天Linux已经成为了一个庞大的生态链系统。从树梅派到超级计算机，从网络交换机到SDN都有Linux操作系统的身影。其实Gnu/Linux系统本身指的是很多自由开源软件和Gnu/Linux内核的集合体。各种Linux发行版可以让你满足各种独特或者大众的功能。Linux系统是当前系统管理员或者网络管理员尽量要熟悉的操作系统之一。当然，Linux也提供了很多好玩的工具软件，我们以Debian Gnu/Linux8.7为例进行配置，将你的电脑终端命令行改变成一个就像电影里黑客的界面，装逼很有用哦。 1、配置VIM，添加语法高亮及其它插件： 1.1、因为Debian Gnu/Linux系统已经默认使用了vim7.4版本，可以使用命令vi /etc/vim/vimrc，添加如下内容： syntax on fileype plugin indent on set hlsearch 三个选项直接打开语法、搜索高亮显示，文件类型检测功能。 1.2、安装VIM相关插件，可以使用命令apt-get install vim-addon-manager vim-addon-mw-utils vim-gocomplete vim-erlang vim-erlang-syntax vim-gnome vim-gocomplete vim-perl vim-python vim-ruby vim-scripts vim-syntax-docker vi...</section>
        <footer class="box vertical blog-footer-box">
            <span>ak_birdofprey</span>
            <span>发布于</span>
            <span>5天前</span>
                        <span>阅读 2625</span>
                                    <span>评论 26</span>
                                    <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/go4it" style="display:block;">
            <img alt="go4it" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1461/2922256_50.jpeg?t=1474523359000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/go4it/blog/830600" class="sc overh blog-title-link" target='_blank'
               title="关于netstat的ListenOverflows等参数">
                <h2 class="blog-name sc text-ellipsis">关于netstat的ListenOverflows等参数</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">##三次握手 ![输入图片说明](https://static.oschina.net/uploads/img/201701/27204509_U5nu.jpg "在这里输入图片标题") ##ListenOverflows ``` root@b5dbe93bcb04:/opt# netstat -s | grep listen 22438 times the listen queue of a socket overflowed ``` tcp_v4_syn_recv_sock()：三路握手最后一步完成之后，Accept queue队列(完全连接队列，其大小为min(/proc/sys/net/core/somaxconn, backlog))超过上限时加１. ##ListenDrops ``` root@b5dbe93bcb04:/opt# netstat -s | grep LISTEN 49148 SYNs to LISTEN sockets dropped ``` tcp_v4_syn_recv_sock()：任何原因，包括Accept queue超限，创建新连接，继承端口失败等，加１. 包含ListenOverflows的情况，也就是说当出现ListenOverflows时，它也会增加1；除此之外，当内存不够无法为新的连接分配socket相关的数据结构时，也会增加1，当然还有别的异常情况下会增加1。 ##AttemptFails - tcp_done():如果在SYN_SENT/SYN_RECV状态下结束一个连接，加１ - tcp_check_req():被动三路握手最后一个阶段中的输入包中如果有RST|SYN标志，加１ &gt;1.试图和一个不存在的套接口建立连接时，连接失败，而TcpAttemptFails同时会加1 &gt;2....</section>
        <footer class="box vertical blog-footer-box">
            <span>go4it</span>
            <span>发布于</span>
            <span>5天前</span>
                        <span>阅读 61</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/2401395" style="display:block;">
            <img alt="子允" class="blog-author" data-delay="https://www.oschina.net/img/portrait.gif">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/2401395/blog/830599" class="sc overh blog-title-link" target='_blank'
               title=" webpack-dev-server与热加载插件整合设置 HMR 实现局部刷新的2种方式">
                <h2 class="blog-name sc text-ellipsis"> webpack-dev-server与热加载插件整合设置 HMR 实现局部刷新的2种方式</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">本文将讲 `react-hot-loader` -v3 与 `webpack-dev-server` -v2.2 整合的那些关键点（这个版本适用于开发环境）。 后续会补上 `express` 与 `webpack-dev-middleware` 、`webpack-hot-middleware` 的版本（这个版本适用于生产环境）。 本文与 [`redbox-react`](https://github.com/commissure/redbox-react) 一起讲.</section>
        <footer class="box vertical blog-footer-box">
            <span>子允</span>
            <span>发布于</span>
            <span>5天前</span>
                        <span>阅读 52</span>
                                    <span>评论 1</span>
                                            </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/3243015" style="display:block;">
            <img alt="charpty" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1621/3243015_50.jpeg?t=1485844760000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/3243015/blog/830575" class="sc overh blog-title-link" target='_blank'
               title="使用gdb调试Nginx worker进程">
                <h2 class="blog-name sc text-ellipsis">使用gdb调试Nginx worker进程</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">&gt; 小编博客地址：https://charpty.com 在开发Nginx模块或者遇到难以解决的Nginx配置问题时，不得不通过调试手段来找出问题所在，本文通过在Linux系统上使用gdb工具来演示如何调试运行中的Nginx进程，本文只关心Nginx的实际执行者--worker进程。 ###（1）编译Nginx 首先你需要编译出带有调试信息的可执行文件和.o文件。 获得Nginx源码之后，通过我们熟悉的```configure```命令指定稍后make时需带有debug信息。 ```shell ./configure --with-debug ``` 之后直接调用相应命令编译Nginx源码即可 ```shell make ``` 此时，在源码录下生成了一个objs目录，该目录下包含了带有调试信息的可执行文件和.o文件，是我们调试的关键，我们稍后的调试过程都将在这个目录下进行。 ###（2）配置和启动Nginx 这里可以大家需要根据自己遇到的问题来配置自己的nginx.conf，在源码目录的conf文件夹下提供了默认的nginx.conf，由于本文只是一个示例，我们就采用Nginx的静态文件模块（```ngx_http_static_module```）来进行调试，也就是默认的nginx.conf中指定的: ```shell location / { root html; index index.html index.htm; } ``` 这样的话，我们不需要这个配置文件进行任何改动，直接启动N...</section>
        <footer class="box vertical blog-footer-box">
            <span>charpty</span>
            <span>发布于</span>
            <span>5天前</span>
                        <span>阅读 105</span>
                                    <span>评论 1</span>
                                            </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/3243015" style="display:block;">
            <img alt="charpty" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1621/3243015_50.jpeg?t=1485844760000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/3243015/blog/830574" class="sc overh blog-title-link" target='_blank'
               title="Ubuntu 平台下OpenResty的安装">
                <h2 class="blog-name sc text-ellipsis">Ubuntu 平台下OpenResty的安装</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">&gt; 小编博客地址：https://charpty.com ####源码包准备 我们首先要在[官网](http://openresty.org/)下载OpenResty的源码包。官网上会提供很多的版本，各个版本有什么不同也会有说明，我们可以按需选择下载。笔者选择下载的源码包为ngx_openresty-1.9.3.1.tar.gz。 ####相关依赖包的安装 首先你要安装OpenResty需要的多个库 请先配置好你的apt源，配置源的过程在这就不阐述了，然后执行以下命令安装OpenResty编译或运行时所需要的软件包。 ``` apt-get install libreadline-dev libncurses5-dev libpcre3-dev \ libssl-dev perl make build-essential ``` 如果你只是想测试一下OpenResty，并不想实际使用，那么你也可以不必去配置源和安装这些依赖库，请直接往下看。 ###OpenResty的安装 OpenResty在linux的部署可以通过C程序员非常熟悉的方式进行安装： ``` ./configure make && make install ``` 具体的步骤如下： ####（1）将软件包拷贝到Ubuntu系统中 首先通过WinScp或者XFTP等文件传输工具将之前下载的OpenResty包传输到你的Ubuntu系统上，如果你的Ubuntu系统可以直接联网的话，你也可以通过```wget https://openresty.org/download/ngx_openresty-1.9.3.1.tar.gz```命令...</section>
        <footer class="box vertical blog-footer-box">
            <span>charpty</span>
            <span>发布于</span>
            <span>5天前</span>
                        <span>阅读 87</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/xxiaobian" style="display:block;">
            <img alt="小小编辑" class="blog-author" data-delay="https://static.oschina.net/uploads/user/714/1428332_50.jpg?t=1400110163000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/xxiaobian/blog/830520" class="sc overh blog-title-link" target='_blank'
               title="OSChina 新年乱弹 ——爱你们，新年快乐">
                <h2 class="blog-name sc text-ellipsis">OSChina 新年乱弹 ——爱你们，新年快乐</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">【今日歌曲】 @vvtf  ：@小小编辑 明天还乱弹吗? 乱弹我想点一首许巍的&lt;家&gt;. 因为我明天还上班呢.#点歌# 《家》- 许巍 手机党少年们想听歌，请使劲儿戳（这里） @花间_拾零 :上班了 快起来。 “你上班睡觉的违纪行为，已经被我拍照。” @加大装益达 ：上班~ “上着班，老板努力让我开心点。” 但是来上班 的时候明显看着人少了好多。 @假装搞IT  ：地铁里的人明显少了很多。大家相视而笑，互相点头示意但眼神坚定。因为他们知道，只有共和国最优秀的人才，各部门最重要的岗位才会在这个时间出现在这个车厢。拖着行李箱的人羞愧的低下了头，他知道自己是党和国家的寄生虫。但是没有人责备他，毕竟每个人的能力有限，与其让他们继续工作，不如放他们回家过年。 “但加班的时候，共和国最优秀的人才还是高兴不起来。” 面对加班的情况， 麻麻一句道破天机： @BillFun ：…… 你要不是年薪百万的话， 那么上班还是对自己好一些吧。 @hosser ： 今天上班吃好点啦啦啦 第二张图打死我也刷不出来了。 对不起了，大家。 这么好看好想试着把你描绘在画中， @渺渺一粟：过年居然从“中二”女孩变得这么女王style…… 上班无聊试着画了下。 第二张图又打死刷不出来了。 我…… ...</section>
        <footer class="box vertical blog-footer-box">
            <span>小小编辑</span>
            <span>发布于</span>
            <span>5天前</span>
                        <span>阅读 1431</span>
                                    <span>评论 31</span>
                                    <span>点赞 3</span>
                                    <span>打赏 5</span>
                    </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/Parser" style="display:block;">
            <img alt="Parser7" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1156/2313487_50.png?t=1425729578000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/Parser/blog/830478" class="sc overh blog-title-link" target='_blank'
               title="基于caffe与MATLAB接口回归分析与可视化">
                <h2 class="blog-name sc text-ellipsis">基于caffe与MATLAB接口回归分析与可视化</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">本文内容主要分为两部分，第一部分介绍基于caffe的回归分析，包括了数据准备、配置文件等；第二部分介绍了在MATLAB上进行的可视化。（话说本人最近有个课题需要做场景分类，有兴趣可以共同探讨一下）。</section>
        <footer class="box vertical blog-footer-box">
            <span>Parser7</span>
            <span>发布于</span>
            <span>6天前</span>
                        <span>阅读 342</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/xpbob" style="display:block;">
            <img alt="xpbob" class="blog-author" data-delay="https://static.oschina.net/uploads/user/731/1463652_50.png?t=1406635909000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/xpbob/blog/830366" class="sc overh blog-title-link" target='_blank'
               title="java并发面试常识之ArrayBlockingQueue">
                <h2 class="blog-name sc text-ellipsis">java并发面试常识之ArrayBlockingQueue</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">ArrayBlockingQueue实现的解析</section>
        <footer class="box vertical blog-footer-box">
            <span>xpbob</span>
            <span>发布于</span>
            <span>7天前</span>
                        <span>阅读 538</span>
                                                <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/gemron" style="display:block;">
            <img alt="GuoMengYue" class="blog-author" data-delay="https://static.oschina.net/uploads/user/111/223115_50.jpg?t=1372831360000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/gemron/blog/830297" class="sc overh blog-title-link" target='_blank'
               title="kafka中文文档">
                <h2 class="blog-name sc text-ellipsis">kafka中文文档</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">文档 Kafka 0.10.1文档 之前的版本：0.7.x，0.8.0，0.8.1.X，0.8.2.X，0.9.0.X，0.10.0.X。 1.入门 1.1简介 1.2使用案例 1.3快速入门 1.4生态系统 1.5升级 2. API 2.1生产者API 2.2消费者API 2.3 Streams API 2.4连接API 2.5遗留API 3.配置 3.1代理配置 3.2生产者配置 3.3消费者配置 3.3.1新的消费者配置 3.3.2旧用户配置 3.4 Kafka连接配置 3.5 Kafka Streams配置 4.设计 4.1动机 4.2持久性 4.3效率 4.4生产者 4.5消费者 4.6消息传递语义 4.7复制 4.8日志压缩 4.9配额 5.实施 5.1 API设计 5.2网络层 5.3消息 5.4消息格式 5.5 Log 5.6分布式 6.操作 6.1基本Kafka操作 添加和删除主题 修改主题 正常关闭 平衡领导 检查消费者的位置 在集群之间镜像数据 扩展群集 退役代理 增加复制因子 6.2数据中心 6.3重要配置 重要的客户端配置 生产服务器配置 6.4 Java版本 6.5硬件和操作系统 操作系统 磁盘和文件系统 应用程序与操作系统刷新管理 Linux Flush行为 Ext4注释 6.6监测 6.7 ZooKeeper 稳定版本 操作化 7.安全 7.1安全概述 7.2使用SSL加密和验证 7.3使用SASL进行验证 7.4授权和ACL 7.5在正在运行的集群中合并安全功能 7.6 ZooKeeper认证 新集群 迁移群集 迁移ZooKeeper集合 ...</section>
        <footer class="box vertical blog-footer-box">
            <span>GuoMengYue</span>
            <span>发布于</span>
            <span>7天前</span>
                        <span>阅读 521</span>
                                    <span>评论 5</span>
                                    <span>点赞 2</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/Seas0n" style="display:block;">
            <img alt="Seas0n_" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1196/2393516_50.jpg?t=1433924451000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/Seas0n/blog/830173" class="sc overh blog-title-link" target='_blank'
               title="react知识点">
                <h2 class="blog-name sc text-ellipsis">react知识点</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">调用 setState 之后发生了什么？   在代码中调用setState函数之后，React 会将传入的参数对象与组件当前的状态合并，然后触发所谓的调和过程（Reconciliation）。经过调和过程，React 会以相对高效的方式根据新的状态构建 React 元素树并且着手重新渲染整个UI界面。在 React 得到元素树之后，React 会自动计算出新的树与老树的节点差异，然后根据差异对界面进行最小化重渲染。在差异计算算法中，React 能够相对精确地知道哪些位置发生了改变以及应该如何改变，这就保证了按需更新，而不是全部重新渲染。   React 中 Element 与 Component 的区别是？   简单而言，React Element 是描述屏幕上所见内容的数据结构，是对于 UI 的对象表述。典型的 React Element 就是利用 JSX 构建的声明式代码片然后被转化为createElement的调用组合。而 React Component 则是可以接收参数输入并且返回某个 React Element 的函数或者类。更多介绍可以参考React Elements vs React Components。   在什么情况下你会优先选择使用 Class Component 而不是 Functional Component？   在组件需要包含内部状态或者使用到生命周期函数的时候使用 Class Component ，否则使用函数式组件。   Re...</section>
        <footer class="box vertical blog-footer-box">
            <span>Seas0n_</span>
            <span>发布于</span>
            <span>1周前</span>
                        <span>阅读 351</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/editorial-story" style="display:block;">
            <img alt="编辑部的故事" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1459/2918182_50.jpeg?t=1484105851000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/editorial-story/blog/830172" class="sc overh blog-title-link" target='_blank'
               title="Canonical 用 Go 做了这五个超酷的项目">
                <h2 class="blog-name sc text-ellipsis">Canonical 用 Go 做了这五个超酷的项目</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">前不久，Google 的 Go 问鼎 TIOBE 排行榜，成为 2016 年年度编程语言。Go 因其易学性及务实性受到大家的喜爱。抛开长篇累牍的理论，Go 更注重的是实践经验，因此越来越多的用户将其应用到工业环境中。在 Canonical 中也一样！作为 Go 的支持者，我们用 Go 做了五个超酷的项目： 1、Juju Juju 堪称是“DevOps工作经验的结晶”，能使用 Charms 将应用程序体系结构部署到 EC2，OpenStack，Azure，HP 数据中心，甚至是基于 Ubuntu 的笔记本电脑。它使得开发和部署过程中团队间的对话和工作流程变得极为清晰明了。 2、Snapcraft Snapd 和 snap工具使系统能够使用 .snap 文件。 为每个 Linux 桌面，服务器，云或设备的打包任意应用程序，并提供直接更新。 有关 snap 文件和 snapd 应用程序的高级概述，请参见 snapcraft.io。 3、LXD 容器虚拟机管理程序能让你将 Linux VM 直接移动到容器，而无需修改应用程序或操作。Canonical 的 LXD 是一个纯容器虚拟机管理程序，能以令人难以置信的速度和密度运行未修改的 Linux 操作系统和 VM 应用程序。 4、Snapweb Snapweb 是一个美观而具功能性的 snap 管理界面。 是一个跨 html / css / javascript 和 golang 的优秀网络应用程序。 5、F...</section>
        <footer class="box vertical blog-footer-box">
            <span>编辑部的故事</span>
            <span>发布于</span>
            <span>1周前</span>
                        <span>阅读 2722</span>
                                    <span>评论 2</span>
                                    <span>点赞 4</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/keysITer" style="display:block;">
            <img alt="Simon_ITer" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1246/2493500_50.jpeg?t=1482139211000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/keysITer/blog/830093" class="sc overh blog-title-link" target='_blank'
               title="树状层级json转换数组的尾递归写法">
                <h2 class="blog-name sc text-ellipsis">树状层级json转换数组的尾递归写法</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">树状层级包含关系的JSON转换为一个数组列表，使用尾递归算法不仅代码简单，而且性能高效，不会爆栈 需求简介： 把树状的JSON数据连起来转换成一个个的数组，如：item1层有一个item2，它的下面有两个item2_1，item2_2，那么转换为数据就是 [{item1:“item1_key”,item2_1:“item2_1_key”},{item1:“item1_key”,item2_2:“item2_2_key”}]，也就是循环遍历 思路 优雅的写代码 可以看到，我们是从JSON里面取数据，那么对于Object类型，一般都是使用item.key这样的方式去取数据，但是对于现在的这个需求，这样写显然是很不优雅的一种写法，而且通用性很低，字段名字一改就都得改了。 所以：我们把需要取的字段名按顺序放在一个数据里面，记录index，每次从数组中取字段名称，这样代码看起来既简洁，维护起来也很方便。 对象闭包问题解决 这里插一句关于对象的闭包问题：for循环当中，我们取了当前的i值，肯定会发生闭包，那么简单的解决办法就是： 先将对象转成字符串，再转成对象，这样来回一转就取到的是对象值了 var str = JSON.stringfy(obj) JSON.parse(str) 代码如下，大家可以放到网页中看一下控制台输出： var json = {
    item1: {
        buckets: [
           ...</section>
        <footer class="box vertical blog-footer-box">
            <span>Simon_ITer</span>
            <span>发布于</span>
            <span>1周前</span>
                        <span>阅读 968</span>
                                    <span>评论 2</span>
                                    <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/lxl8752" style="display:block;">
            <img alt="菜鸟Max" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1427/2854162_50.jpg?t=1468986619000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/lxl8752/blog/830056" class="sc overh blog-title-link" target='_blank'
               title="matlab2014b安装libsvm遇到的问题解析">
                <h2 class="blog-name sc text-ellipsis">matlab2014b安装libsvm遇到的问题解析</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">安装方法： 1：下载libsvm保存保存到合适的路径，推荐Matlab安装目录下的toolbox中例如：D:\Program Files\matlab 2013a\toolbox\libsvm-3.18\matlab ，建议下载比较低版本的libsvm，过高版本的在由于缺少一部分文件容易报错   2：文件解压缩： 3. 将libSVM所在的文件夹加入Matlab的搜索路径，在菜单栏的Set Path中可以设置。Matlab执行程序时，如果在当前路径下没有找到所需的文件，会在搜索路径中继续寻找，所以要确保要使用的文件至少在搜索中。如果Matlab提示找不到文件，而文件又真是存在，很可能的原因是忘记将文件所在目录添加到Matlab的搜索路径下了 4. 设置mex，这里要先将Matlab的当前目录切换到libsvm安装目录下的matlab子文件夹上。这一步mex 的设置时并不是必须的，而是在后面的步骤时必须的，但是为了防止后面忘记，所以这里设置完搜索路径顺便设置当前目录。这个路径一定要切换，不然会报错 找不到文件 在命令窗口输入 注意：mex –setup，注意mex后面有一个空格，也就是正确输入后setup的颜色会变，如果没有输入空格setup颜色为黑色而且运行命令会有错误提示。 接下来会让选择使用哪种编译器，选择自己电脑上所带有的，我使用的VS2012，根据自己matla...</section>
        <footer class="box vertical blog-footer-box">
            <span>菜鸟Max</span>
            <span>发布于</span>
            <span>1周前</span>
                        <span>阅读 86</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/wxappunion" style="display:block;">
            <img alt="扶桑木下" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1543/3087340_50.jpeg?t=1480326216000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/wxappunion/blog/830033" class="sc overh blog-title-link" target='_blank'
               title="原创：微信小程序之MaterialDesign--input组件">
                <h2 class="blog-name sc text-ellipsis">原创：微信小程序之MaterialDesign--input组件</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">主要通过input输入事件配合css的transform动态改变实现这种效果。 实际调试过程中，input组件bindinput事件触发后回调的detail对象，在模拟器中含有cursor属性，在真机中（测过安卓，ios没测过）却没有该属性，最后选择detail对象中的value属性的值的长度来同步输入的位数。 bindfocus事件最好不要添加改变css的代码 。  预览图片： JS： //index.js
//获取应用实例
var app = getApp()
Page({
  data: {
    v_username_border:'', //用户输入框底部border样式
    v_pwd_border:'',  // 密码输入框底部border样式
    v_float_username:'', // 浮动文字字transform 样式
    v_float_pwd:'',
    num_current_un:0,  // 当前输入的文本位数
    sp_num_current_un:'', // 当前输入文本位数超过限制时的样式
    isPwdError:false  // 提交时 密码输入错误时的文本提示
  },
  onLoad: function () {
    console.log('onLoad')
  },
  // 用户名输入框获取焦点时事件回调
  usernameFocus:function(e){
    var that = this;
    console.log(e.detail)
  },
  // 用户名输入框输入时事件回调
  usernameInput:function(e){
    console.log(e.detail)
     this.setDa...</section>
        <footer class="box vertical blog-footer-box">
            <span>扶桑木下</span>
            <span>发布于</span>
            <span>1周前</span>
                        <span>阅读 270</span>
                                                        </footer>
    </div>
</div>
                <a class="hide" href="https://static.oschina.net/action/ajax/get_more_recommend_blog?classification=0&amp;p=2"></a>
    </div>
<div id="topsOfToday" class="blog-list hide">
                                                        <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/didispace" style="display:block;">
            <img alt="程序猿DD" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1326/2653610_50.jpg?t=1456537598000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/didispace/blog/830942" class="sc overh blog-title-link" target='_blank'
               title="Spring Boot 1.5.x新特性：动态修改日志级别">
                <h2 class="blog-name sc text-ellipsis">Spring Boot 1.5.x新特性：动态修改日志级别</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">前天Spring Boot 1.5终于迎来了第一个RELEASE版本：1.5.0，但是由于[一个编译依赖问题](https://github.com/spring-projects/spring-boot/issues/8136)在第二天直接连击到了1.5.1。该版本的发布包含了超过320位贡献者的奉献、10000多次的代码提交。 每次Spring Boot版本更新所带来的新特性都是我们每个用户特别关注的。虽然其中不少特性可能对于大部分用户来说还不一定适用，但是作为基础知识的储备还是有一定的必要性。对于1.5.x版本的新特性列表读者可以直接查看官方博文：[《Spring Boot 1.5.1 released》](https://spring.io/blog/2017/01/30/spring-boot-1-5-1-released)来了解它们，本文不做这些概要性的介绍。在后续的一段时间内，本博客将会陆续介绍一些笔者关心且将会使用的关于Spring Boot 1.5.x中的一些新特性。 ## loggers端点 本文我们就来看看Spring Boot 1.5.x中引入的一个新的控制端点：`/loggers`，该端点将为我们提供动态修改Spring Boot应用日志级别的强大功能。该功能的使用非常简单，它依然延续了Spring Boot自动化配置的实现，所以只需要在引入了`spring-boot-starter-actuator`依赖的条件下就会自动开启该端点的功能（更多关于`spring-boot-starte...</section>
        <footer class="box vertical blog-footer-box">
            <span>程序猿DD</span>
            <span>发布于</span>
            <span>13小时前</span>
                        <span>阅读 341</span>
                                    <span>评论 2</span>
                                            </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/OutOfMemory" style="display:block;">
            <img alt="ksfzhaohui" class="blog-author" data-delay="https://static.oschina.net/uploads/user/79/159239_50.png?t=1471773200000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/OutOfMemory/blog/803349" class="sc overh blog-title-link" target='_blank'
               title="对协程的一些理解">
                <h2 class="blog-name sc text-ellipsis">对协程的一些理解</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">协程 协程(coroutine)最早由Melvin Conway在1963年提出并实现，一句话定义：协程是用户态的轻量级的线程 线程和协程 线程和协程经常被放在一起比较；线程一旦被创建出来，编写者是无法决定什么时候获得或者放出时间片的，是由操作系统进行统一调度的；而协程对编写者来说是可以控制切换的时机，并且切换代价比线程小，因为不需要进行内核态的切换。 协程避免了无意义的调度，由此可以提高性能，但也因此，程序员必须自己承担调度的责任，同时，协程也失去了标准线程使用多CPU的能力, 但是可用通过多个(进程+多协程)模式来充分利用多CPU。 协程另外一个重要的特点就是：协程是作用在用户态，操作系统内核对于协程是毫无感知的，这样一来，协程的创建就类似于普通对象的创建，非常轻量级，从而使你可以在一个线程里面轻松创建数十万个协程，就像数十万次函数调用一样。可以想象一下，如果是在一个进程里面创建数十万个线程，结果该是怎样可怕。 进程、线程、协程 进程：拥有自己独立的堆和栈，既不共享堆，亦不共享栈，进程由操作系统调度。 线程：拥有自己独立的栈和共享的堆，共享堆，不共享栈，线程亦由操作系统调度(标准线程是的)。 协程：和线程一样共享堆，不共享栈，协...</section>
        <footer class="box vertical blog-footer-box">
            <span>ksfzhaohui</span>
            <span>发布于</span>
            <span>2个月前</span>
                        <span>阅读 4039</span>
                                    <span>评论 15</span>
                                    <span>点赞 5</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/waterbear" style="display:block;">
            <img alt="小水熊" class="blog-author" data-delay="https://static.oschina.net/uploads/user/75/150221_50.jpg?t=1454056129000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/waterbear/blog/289739" class="sc overh blog-title-link" target='_blank'
               title="Nodejs实现TCP反向代理">
                <h2 class="blog-name sc text-ellipsis">Nodejs实现TCP反向代理</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">nodejs实现TCP反向代理的两种方式。</section>
        <footer class="box vertical blog-footer-box">
            <span>小水熊</span>
            <span>发布于</span>
            <span>3年前</span>
                        <span>阅读 1470</span>
                                    <span>评论 1</span>
                                            </footer>
    </div>
</div>
                                                        <div class="box item" data-traceid="blog_area_list_ad_1" data-tracepid="blog_area_list">
    <div class="box-fl">
        <a href="https://www.oschina.net/event/2216742" style="display:block;">
            <img class="blog-author" data-delay="https://static.oschina.net/uploads/space/2017/0109/155506_AL3c_2982602_thumb.png">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://www.oschina.net/event/2216742" class="sc overh blog-title-link" target="_blank" title="全球云计算开源峰会">
                <h2 class="blog-name sc text-ellipsis">“全球云计算开源峰会”将于2017年4月19日－20日在国家会议中心举行！</h2>
            </a>
            <div class="box-fr">
                <span style="line-height: 20px;display: block;width: 36px;text-align: center;color: #fff;border-radius: 2px;background: #cecece;font-size: .75rem;">广告</span>
            </div>
        </header>
        <section class="blog-brief text-gradient">近年来，云计算开源技术逐渐成为云计算发展的重要支撑和导向，改变了以往的信息技术进化模式，引领软件技术标准的发展和创新，深刻影响着整个信息技术产业的发展格局。为进一步探索我国云计算开源技术发展模式，加速云计算与各行业的深度融合，更好地发挥云计算在经济社会创新发展中的支撑和引领作用，促进我国云计算产业快速、健康发展。</section>
        <footer class="box vertical blog-footer-box">
            <span>云计算开源产业联盟</span>
        </footer>
    </div>
</div>
                        <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/baishi" style="display:block;">
            <img alt="EDIAGD" class="blog-author" data-delay="https://static.oschina.net/uploads/user/436/873600_50.jpg?t=1376493897000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/baishi/blog/612641" class="sc overh blog-title-link" target='_blank'
               title="IntelliJ IDEA 类代码模板注解自定义">
                <h2 class="blog-name sc text-ellipsis">IntelliJ IDEA 类代码模板注解自定义</h2>
            </a>
                                                    <span class="blog-tag zhuan">转</span>
                    </header>
        <section class="blog-brief text-gradient">IntelliJ IDEA 类代码模板注解自定义</section>
        <footer class="box vertical blog-footer-box">
            <span>EDIAGD</span>
            <span>发布于</span>
            <span>1年前</span>
                        <span>阅读 12678</span>
                                                <span>点赞 3</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/baolinchuan" style="display:block;">
            <img alt="BaoLinChuan" class="blog-author" data-delay="https://www.oschina.net/img/portrait.gif">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/baolinchuan/blog/182761" class="sc overh blog-title-link" target='_blank'
               title="DELL R720服务器安装redhat5.5(scientific linux5.5)">
                <h2 class="blog-name sc text-ellipsis">DELL R720服务器安装redhat5.5(scientific linux5.5)</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">低版本RedHat5.5（scientific linux5.5）安装系统找不到硬盘，系统安装后没网卡驱动，解决方案</section>
        <footer class="box vertical blog-footer-box">
            <span>BaoLinChuan</span>
            <span>发布于</span>
            <span>3年前</span>
                        <span>阅读 4811</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/liygheart" style="display:block;">
            <img alt="朋也" class="blog-author" data-delay="https://static.oschina.net/uploads/user/136/273712_50.jpg?t=1401267688000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/liygheart/blog/324938" class="sc overh blog-title-link" target='_blank'
               title="maven管理项目，引入本地jar包的方法">
                <h2 class="blog-name sc text-ellipsis">maven管理项目，引入本地jar包的方法</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">maven管理项目，引入本地jar包的方法</section>
        <footer class="box vertical blog-footer-box">
            <span>朋也</span>
            <span>发布于</span>
            <span>2年前</span>
                        <span>阅读 7097</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/wangnian" style="display:block;">
            <img alt="王念博客" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1204/2408834_50.jpg?t=1469765532000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/wangnian/blog/714719" class="sc overh blog-title-link" target='_blank'
               title="SpringBoot之部署以及Maven打包切换环境">
                <h2 class="blog-name sc text-ellipsis">SpringBoot之部署以及Maven打包切换环境</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">前言：之前一直用的  Java-jar 运行的，但是部署的时候得停止服务 通过端口kill 掉的，最近在推酷上发现一个安全关闭springboot的博客 ，所以自己整理（搬运）一下。主要是英语有点差，最近也比较忙就没有关注springboot更新的文档。、 方式一：通过shell命令启动 关闭 1.1 后台运行 nohup java -jar 文件名.jar  & 1.2 关闭服务 #!/bin/bash
PID=$(ps -ef | grep 文件名.jar | grep -v grep | awk '{ print $2 }')
if [ -z "$PID" ]
then
    echo 服务已关闭
else
    echo 关闭服务中 $PID
    kill $PID
fi 目前我们公司项目都是通过jenkins执行的git maven打包并执行sh命令启动的。   方式二：通过 HTTP 发送 shutdown 信号 该方式主要依赖 Spring Boot Actuator 的 endpoint 特性，具体步骤如下： 2.1  在 pom.xml 中引入 actuator 依赖 &lt;dependency&gt;
  &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
  &lt;artifactId&gt;spring-boot-starter-actuator&lt;/artifactId&gt;
&lt;/dependency&gt; 2.2  开启 shutdown endpoint Spring Boot Actuator 的 shutdown endpoin t默认是关闭的，因此在 application.properties 中开启 shutdown endpoint ： &lt;dep...</section>
        <footer class="box vertical blog-footer-box">
            <span>王念博客</span>
            <span>发布于</span>
            <span>6个月前</span>
                        <span>阅读 613</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/1046919" style="display:block;">
            <img alt="KyJason" class="blog-author" data-delay="https://static.oschina.net/uploads/user/523/1046919_50.jpg?t=1379510903000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/1046919/blog/477645" class="sc overh blog-title-link" target='_blank'
               title="CMakeListx.txt 编辑语法学习">
                <h2 class="blog-name sc text-ellipsis">CMakeListx.txt 编辑语法学习</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">已hello.cpp为源文件,构建一个CMakeLists.txt cmake_minimum_required(VERSION 2.8)
project(hello)
add_executable(hello hello.cpp) 在目录中的build 文件夹中进行cmake ..和make ,就可以编译源文件生成可运行文件. cmake的常用命令:      project 命令     语句 : project(&lt;projectname&gt; [languageName1 languageName2 … ] )     作用 : 指定项目名 cmake_minimum_required 命令     语句 : cmake_minimum_required(VERSION major[.minor[.patch[.tweak]]] [FATAL_ERROR])     作用 : 指定cmake需要的最小版本      aux_source_directory 命令     语句 : aux_source_directory(&lt;dir&gt; &lt;variable&gt;)     作用 : 获取指定目录下的所有文件,保存到variable中,包括 .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx文件     示例 : aux_source_directory(. var)#获取当前目录中源文件 add_executable 命令     语句 : add_executable(&lt;name&gt; [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 source2 … sourceN)     作用 : 将指定文件source编译成可执行文件,命名位name     示例 : add_exec...</section>
        <footer class="box vertical blog-footer-box">
            <span>KyJason</span>
            <span>发布于</span>
            <span>2年前</span>
                        <span>阅读 2065</span>
                                                <span>点赞 2</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/1046919" style="display:block;">
            <img alt="KyJason" class="blog-author" data-delay="https://static.oschina.net/uploads/user/523/1046919_50.jpg?t=1379510903000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/1046919/blog/698416" class="sc overh blog-title-link" target='_blank'
               title="什么是3DOF，6DOF，9DOF，10DOF，11DOF">
                <h2 class="blog-name sc text-ellipsis">什么是3DOF，6DOF，9DOF，10DOF，11DOF</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">DOF（degree of free） 自由度   "Degrees Of Freedom" or "DOF" is a number of axis and sensors combined for balancing a plane, a helicopter or a robot. 3DOF : 可以是3轴的加速度计或者是3轴的陀螺仪。             This could be a 3-axis accelerometer or it could be a 3-axis gyroscope. 6DOF : 基本上是3轴的加速度计和3轴的陀螺仪结合。             This is mostly a 3-axis accelerometer combined with a 3-axis gyroscope.             也可以是3轴的加速度计和磁力计结合。             An other example of 6DOF is a combination of an accelerometer and a magnetometer for a tilt-compensated compass. 9DOF : 在6DOF上加上磁力计。             This is mostly a 6DOF, combined with a magnetometer (compass). 10DOF : 在9DOF上加上压力传感器。                 This could be a 9DOF, combined with a baromic pressure sensor.                 The baromic (or absolute pressure) sensor can be used as an indication for the height. 11...</section>
        <footer class="box vertical blog-footer-box">
            <span>KyJason</span>
            <span>发布于</span>
            <span>7个月前</span>
                        <span>阅读 158</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/kisops" style="display:block;">
            <img alt="kisops" class="blog-author" data-delay="https://static.oschina.net/uploads/user/622/1245193_50.png?t=1375868814000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/kisops/blog/152182" class="sc overh blog-title-link" target='_blank'
               title="CentOS下如何编译使用新内核">
                <h2 class="blog-name sc text-ellipsis">CentOS下如何编译使用新内核</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">是否需要使用新内核，是否需要定制内核，本文介绍如何如果编译使用内核。</section>
        <footer class="box vertical blog-footer-box">
            <span>kisops</span>
            <span>发布于</span>
            <span>3年前</span>
                        <span>阅读 933</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/jsongo" style="display:block;">
            <img alt="jsongo0" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1159/2319283_50.PNG?t=1456463744000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/jsongo/blog/757871" class="sc overh blog-title-link" target='_blank'
               title="【微信小程序开发•系列文章七】websocket">
                <h2 class="blog-name sc text-ellipsis">【微信小程序开发•系列文章七】websocket</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">为什么需要websocket？ 传统的实时交互的游戏，或服务器主动发送消息的行为（如推送服务），如果想做在微信上，可能你会使用轮询的方式进行，不过这太消耗资源，大量的请求也加重了服务器的负担，而且延迟问题比较严重。如果是自己开发的app，为了解决这些问题，很多团队会自建socket，使用tcp长链接、自定协议的方式与服务器进行相对实时的数据交互。有能力的团队，采用这种方式自然没什么大问题。不过小团队可能就要花费很多时间去调试，要解决很多难题，这个在成本上就划不来。 H5引入了webSocket来解决网页端的长链接问题，而微信小程序也支持websocket。这是一个非常重要的特性，所以本系列的文章会专门拿出一篇来讨论websocket。 webSocket本质上也是TCP连接，它提供全双工的数据传输。一方面可以避免轮询带来的连接频繁建立与断开的性能损耗，另一方面数据可以是比较实时的进行双向传输（因为是长链接），而且WebSocket允许跨域通信（这里有个潜在的跨域安全的问题，得靠服务端来解决）。目前除IE外的浏览器已经对webSocket支持得很好了，微信小程序再推一把之后，它会变得更加流行。 我们来设计一个新的demo，一个比较有趣的小游戏，多人版扫雷，准确地讲，多人版挖...</section>
        <footer class="box vertical blog-footer-box">
            <span>jsongo0</span>
            <span>发布于</span>
            <span>4个月前</span>
                        <span>阅读 4290</span>
                                    <span>评论 8</span>
                                    <span>点赞 4</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/142836" style="display:block;">
            <img alt="豌豆" class="blog-author" data-delay="https://static.oschina.net/uploads/user/71/142836_50.jpg?t=1378642533000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/142836/blog/170179" class="sc overh blog-title-link" target='_blank'
               title="HTTP协议理解与应用总结">
                <h2 class="blog-name sc text-ellipsis">HTTP协议理解与应用总结</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">总结了自己在实际工作场景中遇到的与http协议相关的一些内容的理解。</section>
        <footer class="box vertical blog-footer-box">
            <span>豌豆</span>
            <span>发布于</span>
            <span>3年前</span>
                        <span>阅读 10228</span>
                                    <span>评论 24</span>
                                    <span>点赞 13</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/200350" style="display:block;">
            <img alt="南国猿帝" class="blog-author" data-delay="https://static.oschina.net/uploads/user/100/200350_50.jpg?t=1439974041000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/200350/blog/494664" class="sc overh blog-title-link" target='_blank'
               title="ASP.NET MVC 基于角色的权限控制系统的示例教程">
                <h2 class="blog-name sc text-ellipsis">ASP.NET MVC 基于角色的权限控制系统的示例教程</h2>
            </a>
                                                    <span class="blog-tag zhuan">转</span>
                    </header>
        <section class="blog-brief text-gradient">上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法，接下来讲解基于角色的权限控制方法。 基于角色的权限控制方法概述 基于角色的权限控制系统RBAC（Role Based Access Control）是目前最流行，也是最通用的权限控制系统。所谓基于角色的权限控制，就是将各个操作权限分组，每一个组就是一个角色，举个例子：管理员拥有所有的权限，编辑就只拥有写文章和发布文章的权限，这里的“管理员”和“编辑”就是一个角色——一系列操作权限的集合。我们只需要将某个角色赋予某个用户那么这个用户就拥有这个角色下的权限集合。   现在我们要做的就是通过把Controller下的每一个Action可以看作是一个权限，然后可以通过方法将每一个权限进行自定义的分组，从而创建一个角色，然后将角色与用户对应起来。 基于角色的权限控制方法步骤 步骤一、新建一个RoleAuthorizeAttribute类 这个类可以拿到ControllerName和ActionName，这样可以根据ControllerName和ActionName判断是什么样的操作，如下面的代码 
using System;
using System.Collections.Generic;
using System.Linq;
using System.We...</section>
        <footer class="box vertical blog-footer-box">
            <span>南国猿帝</span>
            <span>发布于</span>
            <span>1年前</span>
                        <span>阅读 884</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/cherishlives" style="display:block;">
            <img alt="cherishlives" class="blog-author" data-delay="https://static.oschina.net/uploads/user/108/216459_50.jpg">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/cherishlives/blog/98431" class="sc overh blog-title-link" target='_blank'
               title="使用spring+maven时配置文件中的特殊字符处理">
                <h2 class="blog-name sc text-ellipsis">使用spring+maven时配置文件中的特殊字符处理</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">在类中需要使用一个key(a&b)进行MD5加密， 项目使用spring+maven,此key需要spring注入， 而在spring配置文件中则需要引用maven的pom.xml配置文件里定义的key。 而这个key(a&b)在xml文件中是会出错的，因为&是特殊字符,需要进行转义并且需要加&lt;![CDATA[]]&gt;， 而不是单一的只转义或者只加&lt;![CDATA[]]&gt;。 最终在pom.xml中配置为&lt;key&gt;&lt;![CDATA[a&amp;b]]&gt;&lt;/key&gt; 因为这个key在到达我们需要使用的类中时，需要经过两次xml解析， 即pom.xml解析为a&amp;b到spring.xml解析为最终使用的a&b。 如果其他地方需要使用此key,千万别看到pom.xml中的key加了&lt;![CDATA[]]&gt; 以为这就是最终的key,而直接拷贝到其他地方使用，因为此key是要经过两次转义的！</section>
        <footer class="box vertical blog-footer-box">
            <span>cherishlives</span>
            <span>发布于</span>
            <span>4年前</span>
                        <span>阅读 1941</span>
                                    <span>评论 1</span>
                                            </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/1pei" style="display:block;">
            <img alt="一配" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1144/2288810_50.jpg?t=1434502247000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/1pei/blog/495948" class="sc overh blog-title-link" target='_blank'
               title="TypeScript手册翻译系列4-模块">
                <h2 class="blog-name sc text-ellipsis">TypeScript手册翻译系列4-模块</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">这是TypeScript手册翻译系列的第4篇，本文主要是介绍TypeScript的模块，内部模块与外部模块，以及使用模块时常见的一些错误。</section>
        <footer class="box vertical blog-footer-box">
            <span>一配</span>
            <span>发布于</span>
            <span>1年前</span>
                        <span>阅读 2385</span>
                                    <span>评论 1</span>
                                    <span>点赞 2</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/2450666" style="display:block;">
            <img alt="杰克鹏仔" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1225/2450666_50.jpg?t=1457365143000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/2450666/blog/830938" class="sc overh blog-title-link" target='_blank'
               title="读书笔记 — Java高并发程序设计 — 第二章 — 基础（上）">
                <h2 class="blog-name sc text-ellipsis">读书笔记 — Java高并发程序设计 — 第二章 — 基础（上）</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">1 有关线程的一些事     线程的所有状态都在Thread中的State枚举中定义： public enum State {
        /**
         * Thread state for a thread which has not yet started.
         */
        NEW,

        /**
         * Thread state for a runnable thread.  A thread in the runnable
         * state is executing in the Java virtual machine but it may
         * be waiting for other resources from the operating system
         * such as processor.
         */
        RUNNABLE,

        /**
         * Thread state for a thread blocked waiting for a monitor lock.
         * A thread in the blocked state is waiting for a monitor lock
         * to enter a synchronized block/method or
         * reenter a synchronized block/method after calling
         * {@link Object#wait() Object.wait}.
         */
        BLOCKED,

        /**
         * Thread state for a waiting thread.
         * A thread is in the waiting state due to calling one of the
         * following methods:
         * &lt;ul&gt;
 ...</section>
        <footer class="box vertical blog-footer-box">
            <span>杰克鹏仔</span>
            <span>发布于</span>
            <span>14小时前</span>
                        <span>阅读 4</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/kutengshe" style="display:block;">
            <img alt="henry-zhang" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1174/2348924_50.jpg?t=1429087594000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/kutengshe/blog/483115" class="sc overh blog-title-link" target='_blank'
               title=" Android 如何在Eclipse中查看Android API源码 及 support包源码">
                <h2 class="blog-name sc text-ellipsis"> Android 如何在Eclipse中查看Android API源码 及 support包源码</h2>
            </a>
                                                    <span class="blog-tag zhuan">转</span>
                    </header>
        <section class="blog-brief text-gradient">当我们阅读android API开发文档时候，上面的每个类，以及类的各个方法都是已经写好的方法和控件，可是我们只是在搬来使用，不知道它的原理，它是如何被实现的。android系统是开源的，所以谷歌官方在每发布一个版本的时候都会放出它对应的API源码的，让我们可以深入了解android的API实现过程，这就是开源的魅力。如果我们从API源码的角度去了解了开发过程，那样对于作为开发人员的我们，便会对他有更深入的体会，有助于日后的软件开发。 比如查看Activity的源码，如图 也可以查看系统方法怎么去实现一个过程， 如每个activity设置界面时都会去调用的一个方法：setContentView(R.layout.welcome); 从代码中我们可以看到，这个方法其实就是系统分装好我们拿来用的简化版，我们也可以按照源码里面的 getWindow().setContentView(R.layout.welcome); 这样的实现效果都是一样的。 在例如系统提供的按钮控件Button: 不看不知道一看明白了，原来它的父类就是TextView，那在然我们看看TextView控件的源码： 可以发现，它的父类是View，安卓的系统控件都是继承了View类，画出来的，所以在我们想要自定义控件的时候，可以继承View去做出自己想要的控件。 在Eclipse中需要查看某个类的源...</section>
        <footer class="box vertical blog-footer-box">
            <span>henry-zhang</span>
            <span>发布于</span>
            <span>2年前</span>
                        <span>阅读 4987</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/339952754s" style="display:block;">
            <img alt="339952754s" class="blog-author" data-delay="https://www.oschina.net/img/portrait.gif">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/339952754s/blog/665671" class="sc overh blog-title-link" target='_blank'
               title="Spring Boot初探  ">
                <h2 class="blog-name sc text-ellipsis">Spring Boot初探  </h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">Spring Boot初探</section>
        <footer class="box vertical blog-footer-box">
            <span>339952754s</span>
            <span>发布于</span>
            <span>9个月前</span>
                        <span>阅读 252</span>
                                                <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/pybug" style="display:block;">
            <img alt="pyBug" class="blog-author" data-delay="https://static.oschina.net/uploads/user/77/155771_50.jpg?t=1343539410000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/pybug/blog/29286" class="sc overh blog-title-link" target='_blank'
               title="In-place counting sort 原地计数排序">
                <h2 class="blog-name sc text-ellipsis">In-place counting sort 原地计数排序</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">Introduction to Algorithm, 3rd edtion, P206, problem 8-2-e Suppose that the n records have keys in the range from 1 to k. Show how to modify counting sort so that the records can be sorted in place in O(n + k) time. You may use O(k) storage outside the input array. (Hint: How would you do it for k = 3?) 要求排序是in-place的，我的思路是一边遍历原序列，一边使用swap操作将元素换到正确的位置上。和非in-place的版本一样，使用一个count数组记录每个key出现的次数，再通过累加得到每个key的正确位置；从序列末尾开始往前遍历，将每个元素和其正序位置上的元素交换，然后将其key的计数减1。每次swap都会将一个元素移动到它的最终位置上，但是在遍历的过程中可能再次移动一个之前移动过的元素（因为key的计数值减小了，会错误地认为其不在正确位置上）。为了避免这种情况，在遍历时判断元素是否在正确的区间内，仅当不再正确区间中才对元素进行移动。Python实现的算法如下： # countingsort.py

def countingsort(seq, k):
    """In-place counting sort.

    """
    c = [0] * k
    sn = len(seq)

    for i in range(sn):
        c[seq[i]...</section>
        <footer class="box vertical blog-footer-box">
            <span>pyBug</span>
            <span>发布于</span>
            <span>5年前</span>
                        <span>阅读 887</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/257950" style="display:block;">
            <img alt="天蓬小猪" class="blog-author" data-delay="https://static.oschina.net/uploads/user/128/257950_50.jpg?t=1366890863000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/257950/blog/477532" class="sc overh blog-title-link" target='_blank'
               title="Jfinal资料汇总（慢慢更新）">
                <h2 class="blog-name sc text-ellipsis">Jfinal资料汇总（慢慢更新）</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">Jfinal资料汇总（慢慢更新）</section>
        <footer class="box vertical blog-footer-box">
            <span>天蓬小猪</span>
            <span>发布于</span>
            <span>2年前</span>
                        <span>阅读 2962</span>
                                    <span>评论 23</span>
                                    <span>点赞 9</span>
                                </footer>
    </div>
</div>
            </div>

<div id="topsOfWeek" class="blog-list hide">
                                                    <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/1859679" style="display:block;">
            <img alt="wier" class="blog-author" data-delay="https://static.oschina.net/uploads/user/929/1859679_50.jpeg?t=1483774857000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/1859679/blog/830623" class="sc overh blog-title-link" target='_blank'
               title="关于B站除夕夜被攻击">
                <h2 class="blog-name sc text-ellipsis">关于B站除夕夜被攻击</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">早上醒来，被朋友发来的一个信息给震惊了，除夕夜B站被攻击。   选择在除夕夜爆出这个事情，想必是提前已经规划好了，要造成一定的影响。目前网上的谣言很多，有说欠薪资，有说B站营销等等。具体有什么目的，以及什么原因就不再评论，在真相没有出来之前，一切都是不靠谱的。   据官方更新的最新消息，1.27号18:20起开始遭受了大面积攻击。随后10:30,后台审核系统被攻击。据统计，此次遭受攻击 账号数约占总账号的1.8%，大部分是是L6和L5的账号，影响的只有节操值，账号和密码安全不会受到影响。   1、从官方公布的消息来看，目前管理端被黑入的可能性比较高。不过管理端已经有操作权限了，用户资料和密码是否已经外泄，这个不得而知了，我觉得概率还是很高的。另外管理端上说，管理端是否和主站采用一个库，因为不做物理隔绝，让主库暴露在外层，无论是内部操作还是外部操作，对主库都是又极高的危险。   2、密码的存储方式。我知道这是个极其简单又容易遗漏的事情，像往年爆出的用户密码被盗，多数都是明文的原因。若是明文存码，用户的资产后期会被洗劫和转移，这对主站和用户的伤害会很大。若是使用密文，是否采用MD5、SHA1等单向HASH加密，目前来看这种加密现在也...</section>
        <footer class="box vertical blog-footer-box">
            <span>wier</span>
            <span>发布于</span>
            <span>4天前</span>
                        <span>阅读 1974</span>
                                    <span>评论 10</span>
                                            </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/3051916" style="display:block;">
            <img alt="快鸟VPN" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1525/3051916_50.jpeg?t=1479354807000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/3051916/blog/789614" class="sc overh blog-title-link" target='_blank'
               title="快鸟VPN和快鸟影梭SS 今天免费账号更新">
                <h2 class="blog-name sc text-ellipsis">快鸟VPN和快鸟影梭SS 今天免费账号更新</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">免费VPN账号 可以在Win 10应用商店搜索【快鸟VPN】或【快鸟SS】获取，或者收藏本页面 获取后的帐号需要填入系统设置或者软件才能使用，不是获取了就能连上。 快鸟VPN QQ群：307988452 使用教程点击本页面下方教程，2017.1.29免费账号更新： PPTP连不上的话，请使用手机流量，或者使用影梭。 打不开国外网页，浏览器建议使用Chrome浏览器：https://www.baidu.com/s?wd=chrome浏览器 今天免费账号更新 【VPN：类型PPTP，服务器地址45.63.93.189用户名freevpn密码88888888】 【影梭Shadowsocks：服务器地址185.72.156.28端口8989密码88888888加密方式：AES-256-CFB】 【L2TP免费VPN失效，如需要使用，请联系客服QQ：3197571508  购买付费帐号】   另外：付费VIP更快更稳定，购买VIP付费独立帐号请加快鸟vpn客服qq：3197571508。遇到VPN连不上的情况请联系客服解决。 点击下方超链接可以查看教程： PPTP： 快鸟VPN Win10 VPN设置教程  快鸟VPN Win7 PPTP VPN设置教程 快鸟VPN WP连接PPTP使用教程 快鸟VPN 安卓Andriod PPTP设置教程 快鸟VPN iOS PPTP设置教程   影梭： 快鸟影梭SS Windows上使用影梭教程 快鸟影梭SS Android上使用影梭教程 快鸟影梭SS iPhone iOS 设置教程 ...</section>
        <footer class="box vertical blog-footer-box">
            <span>快鸟VPN</span>
            <span>发布于</span>
            <span>2个月前</span>
                        <span>阅读 54322</span>
                                                <span>点赞 2</span>
                                    <span>打赏 1</span>
                    </footer>
    </div>
</div>
                                                    <div class="box item" data-traceid="blog_area_list_ad_1" data-tracepid="blog_area_list">
    <div class="box-fl">
        <a href="https://www.oschina.net/event/2216742" style="display:block;">
            <img class="blog-author" data-delay="https://static.oschina.net/uploads/space/2017/0109/155506_AL3c_2982602_thumb.png">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://www.oschina.net/event/2216742" class="sc overh blog-title-link" target="_blank" title="全球云计算开源峰会">
                <h2 class="blog-name sc text-ellipsis">“全球云计算开源峰会”将于2017年4月19日－20日在国家会议中心举行！</h2>
            </a>
            <div class="box-fr">
                <span style="line-height: 20px;display: block;width: 36px;text-align: center;color: #fff;border-radius: 2px;background: #cecece;font-size: .75rem;">广告</span>
            </div>
        </header>
        <section class="blog-brief text-gradient">近年来，云计算开源技术逐渐成为云计算发展的重要支撑和导向，改变了以往的信息技术进化模式，引领软件技术标准的发展和创新，深刻影响着整个信息技术产业的发展格局。为进一步探索我国云计算开源技术发展模式，加速云计算与各行业的深度融合，更好地发挥云计算在经济社会创新发展中的支撑和引领作用，促进我国云计算产业快速、健康发展。</section>
        <footer class="box vertical blog-footer-box">
            <span>云计算开源产业联盟</span>
        </footer>
    </div>
</div>
                        <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/Birdofprey" style="display:block;">
            <img alt="ak_birdofprey" class="blog-author" data-delay="https://static.oschina.net/uploads/user/87/174123_50.gif?t=1414574139000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/Birdofprey/blog/830608" class="sc overh blog-title-link" target='_blank'
               title="把你的Linux打扮的像个黑客屏幕">
                <h2 class="blog-name sc text-ellipsis">把你的Linux打扮的像个黑客屏幕</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">把你的Linux打扮的像个黑客屏幕 Gnu/Linux的好玩，真是有目共睹，世界上越来越多的用户已经使用和玩耍它很久啦。今天Linux已经成为了一个庞大的生态链系统。从树梅派到超级计算机，从网络交换机到SDN都有Linux操作系统的身影。其实Gnu/Linux系统本身指的是很多自由开源软件和Gnu/Linux内核的集合体。各种Linux发行版可以让你满足各种独特或者大众的功能。Linux系统是当前系统管理员或者网络管理员尽量要熟悉的操作系统之一。当然，Linux也提供了很多好玩的工具软件，我们以Debian Gnu/Linux8.7为例进行配置，将你的电脑终端命令行改变成一个就像电影里黑客的界面，装逼很有用哦。 1、配置VIM，添加语法高亮及其它插件： 1.1、因为Debian Gnu/Linux系统已经默认使用了vim7.4版本，可以使用命令vi /etc/vim/vimrc，添加如下内容： syntax on fileype plugin indent on set hlsearch 三个选项直接打开语法、搜索高亮显示，文件类型检测功能。 1.2、安装VIM相关插件，可以使用命令apt-get install vim-addon-manager vim-addon-mw-utils vim-gocomplete vim-erlang vim-erlang-syntax vim-gnome vim-gocomplete vim-perl vim-python vim-ruby vim-scripts vim-syntax-docker vi...</section>
        <footer class="box vertical blog-footer-box">
            <span>ak_birdofprey</span>
            <span>发布于</span>
            <span>5天前</span>
                        <span>阅读 2625</span>
                                    <span>评论 26</span>
                                    <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/editorial-story" style="display:block;">
            <img alt="编辑部的故事" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1459/2918182_50.jpeg?t=1484105851000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/editorial-story/blog/830172" class="sc overh blog-title-link" target='_blank'
               title="Canonical 用 Go 做了这五个超酷的项目">
                <h2 class="blog-name sc text-ellipsis">Canonical 用 Go 做了这五个超酷的项目</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">前不久，Google 的 Go 问鼎 TIOBE 排行榜，成为 2016 年年度编程语言。Go 因其易学性及务实性受到大家的喜爱。抛开长篇累牍的理论，Go 更注重的是实践经验，因此越来越多的用户将其应用到工业环境中。在 Canonical 中也一样！作为 Go 的支持者，我们用 Go 做了五个超酷的项目： 1、Juju Juju 堪称是“DevOps工作经验的结晶”，能使用 Charms 将应用程序体系结构部署到 EC2，OpenStack，Azure，HP 数据中心，甚至是基于 Ubuntu 的笔记本电脑。它使得开发和部署过程中团队间的对话和工作流程变得极为清晰明了。 2、Snapcraft Snapd 和 snap工具使系统能够使用 .snap 文件。 为每个 Linux 桌面，服务器，云或设备的打包任意应用程序，并提供直接更新。 有关 snap 文件和 snapd 应用程序的高级概述，请参见 snapcraft.io。 3、LXD 容器虚拟机管理程序能让你将 Linux VM 直接移动到容器，而无需修改应用程序或操作。Canonical 的 LXD 是一个纯容器虚拟机管理程序，能以令人难以置信的速度和密度运行未修改的 Linux 操作系统和 VM 应用程序。 4、Snapweb Snapweb 是一个美观而具功能性的 snap 管理界面。 是一个跨 html / css / javascript 和 golang 的优秀网络应用程序。 5、F...</section>
        <footer class="box vertical blog-footer-box">
            <span>编辑部的故事</span>
            <span>发布于</span>
            <span>1周前</span>
                        <span>阅读 2722</span>
                                    <span>评论 2</span>
                                    <span>点赞 4</span>
                                </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/tdONEmadao" style="display:block;">
            <img alt="龙箨_" class="blog-author" data-delay="https://static.oschina.net/uploads/user/724/1449976_50.png?t=1453380510000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/tdONEmadao/blog/822517" class="sc overh blog-title-link" target='_blank'
               title="计费规则">
                <h2 class="blog-name sc text-ellipsis">计费规则</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient"># 前言 ``` 写的比较详细,觉得啰嗦或不关注的部分可以跳过 当然,没看明白或者想了解更多细节 可以随时问我 qq: 360810498 邮箱: td1madao@163.com ``` ![0000](http://wx1.sinaimg.cn/mw690/006ds5nigy1fc49v1wo0xj30lq09mtcf.jpg "在这里输入图片标题") # 我要定制人物,然后咧? ![0001](http://wx2.sinaimg.cn/mw690/006ds5nigy1fc49votimjj30fj0nxgt6.jpg "在这里输入图片标题") 参考:[琪亚娜mod](http://steamcommunity.com/sharedfiles/filedetails/?id=847991972) # 给我估个价吧,都有多少钱的? ``` 模组大致费用 简单[代码+美工]:100~200 (美工很粗糙,一两个比较基础的能力和专属) 标准[代码+美工]:400~600 (带一些特殊专属,科技,人物有一些特殊能力或技能,美工画的还可以) 高级[代码+美工]:800~1200 (带等级,经验,技能,变身,宠物,专门绘制的特效,高级的专属,功能越多费用越多,专门美工绘制专属人物和特效,适用于绝大多数的精品mod) 特殊定制[代码+美工]:根据复杂度而定 (复杂的科技树,复杂的界面功能,复杂的能力,商店,武器强化,特殊剧情彩蛋等额外的设定,复杂的宠物系统,更多游戏没有的功能) [注] : 以上为联机费用,单机代码费用为联机的80%,美工费用请跟美工协商 ...</section>
        <footer class="box vertical blog-footer-box">
            <span>龙箨_</span>
            <span>发布于</span>
            <span>3周前</span>
                        <span>阅读 1934</span>
                                                        </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/25kchun" style="display:block;">
            <img alt="25K纯帅" class="blog-author" data-delay="https://www.oschina.net/img/portrait.gif">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/25kchun/blog/806684" class="sc overh blog-title-link" target='_blank'
               title="鱼跃浏览器插件--全新翻墙神器横空出世，10秒装好秒开youtube!">
                <h2 class="blog-name sc text-ellipsis">鱼跃浏览器插件--全新翻墙神器横空出世，10秒装好秒开youtube!</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">        鱼跃是一款chrome浏览器插件，专业为翻墙而生，10秒装好，一键轻松翻墙，无需任何麻烦设置，稳定秒开Youtube、Facebook、Twitter,Google,instagram等海量国外网站，是广大科学上网爱好者的不二之选！鱼跃，真正的互联网，只需一跃！     鱼跃官网地址：yuyuecj.co      鱼跃插件百度云盘下载地址：http://pan.baidu.com/s/1qY933Da   鱼跃目前新品上线，活动火热进行中：我们新用户注册立送24小时VIP时长，还有用户邀请好友注册立送1小时，好友充值立送50天VIP，而且邀请不设上限，可以说用户可以不断邀请用户当成一个免费插件用。   除此之外，鱼跃还有以下三大特色： 一．秒开海量网站，翻墙稳定高速。      作为一款翻墙神器，最核心的功能当然是翻墙功能，最直接的体现就是翻墙速度，经过多次反复测试以及收集用户反馈，youtube视频播放速度最高可达10000+kbps，且是在最高清1080P的画质下，我们也对市面上所有主流的插件和VPN进行了速度测试，鱼跃的翻墙速度在所有插件工具中绝对是属于前列的。      为什么可以达到这么高的速度呢？首先鱼跃拥有香港、美国、日本、德国、英国、新加坡、香港、加拿大、韩国、法国等多国超高带宽服...</section>
        <footer class="box vertical blog-footer-box">
            <span>25K纯帅</span>
            <span>发布于</span>
            <span>2个月前</span>
                        <span>阅读 3474</span>
                                                        </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/3051916" style="display:block;">
            <img alt="快鸟VPN" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1525/3051916_50.jpeg?t=1479354807000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/3051916/blog/789603" class="sc overh blog-title-link" target='_blank'
               title=" 快鸟VPN Win10下建立VPN连接(PPTP方式)">
                <h2 class="blog-name sc text-ellipsis"> 快鸟VPN Win10下建立VPN连接(PPTP方式)</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">免费VPN账号 可以在Win 10应用商店搜索【快鸟VPN】或【快鸟SS】获取     本文介绍Windows 10系统上设置PPTP的设置方法。 设置之前，请确保Windows 10系统的电脑与PPTP服务器均已经连接到网络。文中涉及到的参数如下表： 注意：此处参数配置仅供本文讲解参考，真实环境中以实际参数为准。     1、右键电脑桌面右下角有线网络图标（或无线网络图标），点击打开网络和共享中心（或右键桌面上的网络，点击属性，进入网络和共享中心页面），并点击设置新的连接或网络，如下图： 2、选择连接到工作区，点击下一步。如下图所示： 3、选择使用我的Internet连接（VPN）(I)，如下图所示： 4、在Internet地址中输入VPN服务器的地址，点击创建，如下图所示： 创建完成后，在更改适配器设置中，会多了一个VPN连接的图标，如下图所示： 1、双击VPN连接的图标，在弹出的设置页面中，找到VPN连接，并点击高级设置，如下图所示： 2、在编辑VPN连接的设置页面，选择VPN类型为点对点隧道协议（PPTP），在用户名和密码中分别填写PPTP的帐号和密码，点击保存。如下图所示： 3、返回到VPN连接的设置页面，参数确认无误后点击返回上一页，如下图所示： 4、点击连接，如下图所示： 5、连接成功，...</section>
        <footer class="box vertical blog-footer-box">
            <span>快鸟VPN</span>
            <span>发布于</span>
            <span>2个月前</span>
                        <span>阅读 7977</span>
                                                        </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/mumu" style="display:block;">
            <img alt="大漠穷秋" class="blog-author" data-delay="https://static.oschina.net/uploads/user/29/59456_50.jpeg?t=1485158372000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/mumu/blog/830696" class="sc overh blog-title-link" target='_blank'
               title="【重要】让你的服务端支持HTML5的PushState模式">
                <h2 class="blog-name sc text-ellipsis">【重要】让你的服务端支持HTML5的PushState模式</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">这是一个非常常见的PushState问题，经常有人来问。 大家都知道，Angular2的路由默认使用了HTML5的PushState模式，这样URL里面就没有#号了，彻底解放了一些强迫症患者。这样一来，URL是好看多了，但是也带来了另一个问题，那就是需要配置一下服务端才能支持HTML5的这种PushState路径。 例如，对于以下URL路径： http://localhost:8080/NiceFish-Tomcat/posts/page/1 当你浏览器里面导航的时候，随意切换都没有问题，但是如果你按F5强制刷新，就会出现404。这是因为PushState模式下的URL里面没有#，浏览器会真的向服务端发起一个请求，而我们在服务端并没有对应于这个路径的资源。 所以，我们需要做一些配置来支持Angular的这种路由模式，以Tomcat为例，配置非常简单，只要在你的项目的web.xml里面加上以下配置就可以了：     &lt;error-page&gt;
        &lt;error-code&gt;404&lt;/error-code&gt;
        &lt;location&gt;/&lt;/location&gt;
    &lt;/error-page&gt; 这样一来，对于找不到资源的路径，Tomcat会全部重定向到根路径上去，这样Angular2就可以在前端自己处理请求的URL了。 对于其它类型的服务端，例如nginx/apache/IIS，请参考这篇文档：https://github.com/angular-ui/ui-router/wiki/Frequently...</section>
        <footer class="box vertical blog-footer-box">
            <span>大漠穷秋</span>
            <span>发布于</span>
            <span>3天前</span>
                        <span>阅读 905</span>
                                    <span>评论 4</span>
                                    <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/langxSpirit" style="display:block;">
            <img alt="斯武丶风晴" class="blog-author" data-delay="https://static.oschina.net/uploads/user/77/155593_50.jpg?t=1437621331000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/langxSpirit/blog/830620" class="sc overh blog-title-link" target='_blank'
               title="Java.I/O流编程一览笔录">
                <h2 class="blog-name sc text-ellipsis">Java.I/O流编程一览笔录</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">针对Java 标准IO的总结笔记。欢迎讨论。</section>
        <footer class="box vertical blog-footer-box">
            <span>斯武丶风晴</span>
            <span>发布于</span>
            <span>4天前</span>
                        <span>阅读 235</span>
                                    <span>评论 4</span>
                                    <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/gemron" style="display:block;">
            <img alt="GuoMengYue" class="blog-author" data-delay="https://static.oschina.net/uploads/user/111/223115_50.jpg?t=1372831360000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/gemron/blog/830297" class="sc overh blog-title-link" target='_blank'
               title="kafka中文文档">
                <h2 class="blog-name sc text-ellipsis">kafka中文文档</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">文档 Kafka 0.10.1文档 之前的版本：0.7.x，0.8.0，0.8.1.X，0.8.2.X，0.9.0.X，0.10.0.X。 1.入门 1.1简介 1.2使用案例 1.3快速入门 1.4生态系统 1.5升级 2. API 2.1生产者API 2.2消费者API 2.3 Streams API 2.4连接API 2.5遗留API 3.配置 3.1代理配置 3.2生产者配置 3.3消费者配置 3.3.1新的消费者配置 3.3.2旧用户配置 3.4 Kafka连接配置 3.5 Kafka Streams配置 4.设计 4.1动机 4.2持久性 4.3效率 4.4生产者 4.5消费者 4.6消息传递语义 4.7复制 4.8日志压缩 4.9配额 5.实施 5.1 API设计 5.2网络层 5.3消息 5.4消息格式 5.5 Log 5.6分布式 6.操作 6.1基本Kafka操作 添加和删除主题 修改主题 正常关闭 平衡领导 检查消费者的位置 在集群之间镜像数据 扩展群集 退役代理 增加复制因子 6.2数据中心 6.3重要配置 重要的客户端配置 生产服务器配置 6.4 Java版本 6.5硬件和操作系统 操作系统 磁盘和文件系统 应用程序与操作系统刷新管理 Linux Flush行为 Ext4注释 6.6监测 6.7 ZooKeeper 稳定版本 操作化 7.安全 7.1安全概述 7.2使用SSL加密和验证 7.3使用SASL进行验证 7.4授权和ACL 7.5在正在运行的集群中合并安全功能 7.6 ZooKeeper认证 新集群 迁移群集 迁移ZooKeeper集合 ...</section>
        <footer class="box vertical blog-footer-box">
            <span>GuoMengYue</span>
            <span>发布于</span>
            <span>7天前</span>
                        <span>阅读 521</span>
                                    <span>评论 5</span>
                                    <span>点赞 2</span>
                                </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/xpbob" style="display:block;">
            <img alt="xpbob" class="blog-author" data-delay="https://static.oschina.net/uploads/user/731/1463652_50.png?t=1406635909000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/xpbob/blog/830366" class="sc overh blog-title-link" target='_blank'
               title="java并发面试常识之ArrayBlockingQueue">
                <h2 class="blog-name sc text-ellipsis">java并发面试常识之ArrayBlockingQueue</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">ArrayBlockingQueue实现的解析</section>
        <footer class="box vertical blog-footer-box">
            <span>xpbob</span>
            <span>发布于</span>
            <span>7天前</span>
                        <span>阅读 538</span>
                                                <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/dingxuewen" style="display:block;">
            <img alt="丁学文" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1619/3238344_50.jpg?t=1485087946000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/dingxuewen/blog/830640" class="sc overh blog-title-link" target='_blank'
               title="CSS 学习笔记3 为文本添加样式">
                <h2 class="blog-name sc text-ellipsis">CSS 学习笔记3 为文本添加样式</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">--- 另发表于[Levi.Blog](https://dingxuewen.github.io/2017/01/28/CSS-Lesson3-%E4%B8%BA%E6%96%87%E6%9C%AC%E6%B7%BB%E5%8A%A0%E6%A0%B7%E5%BC%8F/)和[CSDN](http://blog.csdn.net/DingXue_wen/article/details/54767282) --- ## **为文本添加样式**   使用CSS可以修改文本的字体、大小、粗细、倾斜、行高、前景和背景颜色、间距和对齐方式，可以决定是否为文本添加下划线或删除线可以将文本转化为全部使用大写字母、全部使用小写字母或使用小型大写字母。 ### **选择字体系列**   设置字体的方法：在样式表中需要的选择器之后，输入`font-family: name;`，这里的`name`是首选字体的名称。 ```css /* 由于font-family是继承属性，而我们对body元素设置了Geneva字体，该样式会应用到其他元素。通过对h1和h2元素设置Gill Sans字体，覆盖了继承属性。代码中的字体名称可以用小写，如`font-family: geneva` */ body { font-family: Geneva; } h1,h2 { font-family: "Gill Sans"; } ```   虽然`font-family: name;`的属性是继承的，但是有几个元素不会继承父元素的字体设置，其中有表单的`select`、`textarea`和`input`元素。不过可以强制它们继承父元素的字体设置，代...</section>
        <footer class="box vertical blog-footer-box">
            <span>丁学文</span>
            <span>发布于</span>
            <span>4天前</span>
                        <span>阅读 90</span>
                                                <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/3051916" style="display:block;">
            <img alt="快鸟VPN" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1525/3051916_50.jpeg?t=1479354807000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/3051916/blog/789595" class="sc overh blog-title-link" target='_blank'
               title="快鸟影梭SS Windows上使用影梭教程">
                <h2 class="blog-name sc text-ellipsis">快鸟影梭SS Windows上使用影梭教程</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">免费VPN账号 可以在Win 10应用商店搜索【快鸟VPN】或【快鸟SS】获取 获取后的帐号需要填入下面影梭软件才能使用，不是获取了就能连上。   一、下载Windows下的影梭软件 Win7、XP、Vista系统百度网盘下载地址，提取密码：fjfs Win8 Win10系统百度网盘下载地址，提取密码：brbs 二、下载后解压，解压后运行影梭   代理端口默认1080，请不要修改 注意：免费帐号加密方式：AES-256-CFB，付费帐号加密方式：RC4-MD5 。  三、首次运行，弹出编辑服务器窗口，请输入您购买的端口密码服务器地址和加加密方式。正确填写服务器地址、端口、密码和加密方式，然后点确定   点确定后，右下角弹出提示 四、右键程序图标，弹出主菜单，勾选“启用系统代理” 五、打开任意浏览器（IE/Chrome/Firefox等），即可开始科学上网 （假如连不上的，请及时更新密码，免费密码会每天更换，付费的不变。 再连不上，右键程序图标，弹出主菜单，点击显示日志，strat是正常连上，除外都是连不上。） 最后打开Google官网https://www.google.com 成功请尽情享受互联网。 快鸟VPN QQ群：307988452 快鸟VPN 免费版公共账号密码每天更新一次，VIP套餐一个月10元，半年50，包年100。 可先试用。购买联系客服...</section>
        <footer class="box vertical blog-footer-box">
            <span>快鸟VPN</span>
            <span>发布于</span>
            <span>2个月前</span>
                        <span>阅读 4350</span>
                                                        </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/Parser" style="display:block;">
            <img alt="Parser7" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1156/2313487_50.png?t=1425729578000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/Parser/blog/830478" class="sc overh blog-title-link" target='_blank'
               title="基于caffe与MATLAB接口回归分析与可视化">
                <h2 class="blog-name sc text-ellipsis">基于caffe与MATLAB接口回归分析与可视化</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">本文内容主要分为两部分，第一部分介绍基于caffe的回归分析，包括了数据准备、配置文件等；第二部分介绍了在MATLAB上进行的可视化。（话说本人最近有个课题需要做场景分类，有兴趣可以共同探讨一下）。</section>
        <footer class="box vertical blog-footer-box">
            <span>Parser7</span>
            <span>发布于</span>
            <span>6天前</span>
                        <span>阅读 342</span>
                                                        </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/3243015" style="display:block;">
            <img alt="charpty" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1621/3243015_50.jpeg?t=1485844760000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/3243015/blog/830575" class="sc overh blog-title-link" target='_blank'
               title="使用gdb调试Nginx worker进程">
                <h2 class="blog-name sc text-ellipsis">使用gdb调试Nginx worker进程</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">&gt; 小编博客地址：https://charpty.com 在开发Nginx模块或者遇到难以解决的Nginx配置问题时，不得不通过调试手段来找出问题所在，本文通过在Linux系统上使用gdb工具来演示如何调试运行中的Nginx进程，本文只关心Nginx的实际执行者--worker进程。 ###（1）编译Nginx 首先你需要编译出带有调试信息的可执行文件和.o文件。 获得Nginx源码之后，通过我们熟悉的```configure```命令指定稍后make时需带有debug信息。 ```shell ./configure --with-debug ``` 之后直接调用相应命令编译Nginx源码即可 ```shell make ``` 此时，在源码录下生成了一个objs目录，该目录下包含了带有调试信息的可执行文件和.o文件，是我们调试的关键，我们稍后的调试过程都将在这个目录下进行。 ###（2）配置和启动Nginx 这里可以大家需要根据自己遇到的问题来配置自己的nginx.conf，在源码目录的conf文件夹下提供了默认的nginx.conf，由于本文只是一个示例，我们就采用Nginx的静态文件模块（```ngx_http_static_module```）来进行调试，也就是默认的nginx.conf中指定的: ```shell location / { root html; index index.html index.htm; } ``` 这样的话，我们不需要这个配置文件进行任何改动，直接启动N...</section>
        <footer class="box vertical blog-footer-box">
            <span>charpty</span>
            <span>发布于</span>
            <span>5天前</span>
                        <span>阅读 105</span>
                                    <span>评论 1</span>
                                            </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/z707z" style="display:block;">
            <img alt="邹海清" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1493/2987239_50.jpeg?t=1483522584000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/z707z/blog/829662" class="sc overh blog-title-link" target='_blank'
               title="SpringBoot+SpringMVC+MybatisPlus框架整合练习之【美女图片】爬虫---图文详细流程">
                <h2 class="blog-name sc text-ellipsis">SpringBoot+SpringMVC+MybatisPlus框架整合练习之【美女图片】爬虫---图文详细流程</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">最近浏览很多博客，学习了不少新的知识，收获颇多，就想着能不能将新学的知识整合一下来练练手，提高自己撸代码搭框架的能力，还有就是给大家一个新年福利，爬一爬美女图片网站。上车请刷卡，哈哈。顺便就拿这爬来的数据作为基础数据来整合最近学习的框架。一劳多得。当然，本文还是以框架整合为主，爬取美女图片只是为了获取基础数据而已啦！！</section>
        <footer class="box vertical blog-footer-box">
            <span>邹海清</span>
            <span>发布于</span>
            <span>1周前</span>
                        <span>阅读 848</span>
                                    <span>评论 6</span>
                                    <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/xiaomaijiang" style="display:block;">
            <img alt="小埋酱" class="blog-author" data-delay="https://static.oschina.net/uploads/user/931/1862339_50.jpg?t=1471498818000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/xiaomaijiang/blog/822375" class="sc overh blog-title-link" target='_blank'
               title="混淆视听：用Golang来保护Java程序">
                <h2 class="blog-name sc text-ellipsis">混淆视听：用Golang来保护Java程序</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">&gt;以下的内容实验环境中通过，代码并未开源，只聊聊思路 #反编译带来的困扰 对于一个开发给自己组织内部用的程序，我们是不怎么需要考虑程序被反编译的事情的，但是对于商业软件来说，这又显得有必要，毕竟国内软件行业的竞争还是非常的激烈，大家可以把竞争对手的程序搞过来反编译一下(至于怎么拿别人的程序我相信大家都已经很老手了)，轻易的知道对手基于什么软件来做，或者能够比较容易知道实现原理，然后。。抄抄抄，换个名字，完事，一个全新的产品就出来了。对于**Java**来说这个问题就更加明显了。虽然有类似ZKM这样的商业软件来进行混码，但是混码后只要你有耐心，还是有很大机会能读懂的 &gt; 在这里不得不吐槽一下，ZKM实在太难用了 #尝试用Go来保护我们的Jar文件 这里我们只讨论胖胖的Jar包（就是那种全部都打在一起直接java -jar就能跑的包，例如Spring Boot打出来的，这个叫法是不是有点萌(○’ω’○) ）。 对于防止反编译来说，Golang这类打包出来就是二进制的方式其实就非常适合，打包成二进制之后的程序反编译难度比起一个普通的Jar来说难度会高很多。 &gt; 对于新写的程序来说，Go其实是个挺好的选择，可以省去反编译带来的问题 那是不是把Jar包放到Go里面打包就...</section>
        <footer class="box vertical blog-footer-box">
            <span>小埋酱</span>
            <span>发布于</span>
            <span>3周前</span>
                        <span>阅读 1405</span>
                                    <span>评论 9</span>
                                    <span>点赞 3</span>
                                </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/keysITer" style="display:block;">
            <img alt="Simon_ITer" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1246/2493500_50.jpeg?t=1482139211000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/keysITer/blog/830093" class="sc overh blog-title-link" target='_blank'
               title="树状层级json转换数组的尾递归写法">
                <h2 class="blog-name sc text-ellipsis">树状层级json转换数组的尾递归写法</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">树状层级包含关系的JSON转换为一个数组列表，使用尾递归算法不仅代码简单，而且性能高效，不会爆栈 需求简介： 把树状的JSON数据连起来转换成一个个的数组，如：item1层有一个item2，它的下面有两个item2_1，item2_2，那么转换为数据就是 [{item1:“item1_key”,item2_1:“item2_1_key”},{item1:“item1_key”,item2_2:“item2_2_key”}]，也就是循环遍历 思路 优雅的写代码 可以看到，我们是从JSON里面取数据，那么对于Object类型，一般都是使用item.key这样的方式去取数据，但是对于现在的这个需求，这样写显然是很不优雅的一种写法，而且通用性很低，字段名字一改就都得改了。 所以：我们把需要取的字段名按顺序放在一个数据里面，记录index，每次从数组中取字段名称，这样代码看起来既简洁，维护起来也很方便。 对象闭包问题解决 这里插一句关于对象的闭包问题：for循环当中，我们取了当前的i值，肯定会发生闭包，那么简单的解决办法就是： 先将对象转成字符串，再转成对象，这样来回一转就取到的是对象值了 var str = JSON.stringfy(obj) JSON.parse(str) 代码如下，大家可以放到网页中看一下控制台输出： var json = {
    item1: {
        buckets: [
           ...</section>
        <footer class="box vertical blog-footer-box">
            <span>Simon_ITer</span>
            <span>发布于</span>
            <span>1周前</span>
                        <span>阅读 968</span>
                                    <span>评论 2</span>
                                    <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/editorial-story" style="display:block;">
            <img alt="编辑部的故事" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1459/2918182_50.jpeg?t=1484105851000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/editorial-story/blog/828926" class="sc overh blog-title-link" target='_blank'
               title="【软件周刊第 13 期】时隔半年，Docker 发布重大版本 1.13.0；Debian GNU/Linux 8.7 稳定版发布 安全性增强等">
                <h2 class="blog-name sc text-ellipsis">【软件周刊第 13 期】时隔半年，Docker 发布重大版本 1.13.0；Debian GNU/Linux 8.7 稳定版发布 安全性增强等</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">软件周刊（01.15 — 01.21）：本周热门软件更新 — Debian GNU/Linux 8.7 稳定版发布，安全性增强；SpringSide 归来，有性能的基础库；Kotlin 1.1 Beta 发布，正式版还会远吗？IntelliJ IDEA 2017.1 EAP 发布，改进对 Spring 的支持</section>
        <footer class="box vertical blog-footer-box">
            <span>编辑部的故事</span>
            <span>发布于</span>
            <span>2周前</span>
                        <span>阅读 3682</span>
                                    <span>评论 7</span>
                                    <span>点赞 2</span>
                                </footer>
    </div>
</div>
                                            <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/thinkphp" style="display:block;">
            <img alt="流年" class="blog-author" data-delay="https://static.oschina.net/uploads/user/59/119139_50.jpeg?t=1478910811000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/thinkphp/blog/809709" class="sc overh blog-title-link" target='_blank'
               title="我对ThinkPHP5和Laravel5的一些看法">
                <h2 class="blog-name sc text-ellipsis">我对ThinkPHP5和Laravel5的一些看法</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">本来这个是想发在新版发布贴的评论里面的，发现开源中国的评论有字数限制，所以写在这里了。 技术社区里面经常有人提到ThinkPHP5和Laravel5的优缺点，或者抄袭之类的，其实每个框架都各有优缺点 没有完美，所以优缺点就看开发者的角度和认识（因为你熟悉了一个框架 用起来顺手本身就是一个优点），对于有些用户（尤其是新人）觉得文档好、上手容易是优点，有些用户觉得性能好是优点，又有些用户可能觉得方便扩展才是优点。但往往一个缺点会掩盖所有的优点，这就是很多用户抱怨的原因。喜欢一个框架一定有喜欢的地方，讨厌一个框架也总能找出理由。我觉得开源中国的用户相比国内某些社区来说不那么逼乎，言论都相对客观，所以就特别写了下面一些内容。 以往的版本我们就不说了（已经过了维护生命期了 大家也没有必要揪着历史说事，事物都在发展），毕竟和LV相提并论的最多也是TP5。 我们在开发TP5的时候 一方面吸收了以往版本的用户反馈和抱怨，一方面也吸收了国外主流框架思想的洗礼（例如Laravel，很多用户说TP5参考了yii2 ZF2 其实并没有 如果你看到了只能说明主流的现代思想是速途同归的），并秉承了TP一贯的大道至简的开发思想，经过了长达十月的开发测试才诞生了第一个...</section>
        <footer class="box vertical blog-footer-box">
            <span>流年</span>
            <span>发布于</span>
            <span>1个月前</span>
                        <span>阅读 236</span>
                                    <span>评论 3</span>
                                    <span>点赞 2</span>
                                </footer>
    </div>
</div>
            </div>

<div id="topsOfNew" class="blog-list hide">
                                                        <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/legend1989" style="display:block;">
            <img alt="寂寞的神" class="blog-author" data-delay="https://www.oschina.net/img/portrait.gif">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/legend1989/blog/830960" class="sc overh blog-title-link" target='_blank'
               title="spring mybatis整合 事务管理">
                <h2 class="blog-name sc text-ellipsis">spring mybatis整合 事务管理</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">方式一、使用AOP配置提供事务增强 在spring配置中增加如下配置 &lt;!-- 配置事务管理器 --&gt;
&lt;bean id="transactionManager"
   class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
   p:dataSource-ref="dataSource" /&gt;
   
&lt;!-- 通过AOP配置提供事务增强，让service包下所有Bean的所有方法拥有事务 --&gt;
&lt;aop:config proxy-target-class="true"&gt;
   &lt;aop:pointcut id="serviceMethod"
      expression=" execution(* com.future.service..*(..))
               or execution(* com.future.controller..*(..))" /&gt;
   &lt;aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" /&gt;
&lt;/aop:config&gt;
&lt;tx:advice id="txAdvice" transaction-manager="transactionManager"&gt;
   &lt;tx:attributes&gt;
      &lt;tx:method name="*" /&gt;
           &lt;!--以下注释部分可以提供更细致的回滚策略--&gt;
           &lt;!--&lt;tx:method name="insert*" rollback-for="Exception" /&gt;
           &lt;tx:method name="save*" rollback-for="Exception" /&gt;
           &lt;tx:method name="update*" rollback-for="Exception" /&gt;
           &lt;tx:method name="delete...</section>
        <footer class="box vertical blog-footer-box">
            <span>寂寞的神</span>
            <span>发布于</span>
            <span>1小时前</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/232595" style="display:block;">
            <img alt="jiangwu" class="blog-author" data-delay="https://www.oschina.net/img/portrait.gif">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/232595/blog/830959" class="sc overh blog-title-link" target='_blank'
               title="jdbc报Incorrect string value: &apos;\xF0\x9F\xA4\x97&apos; for column">
                <h2 class="blog-name sc text-ellipsis">jdbc报Incorrect string value: '\xF0\x9F\xA4\x97' for column</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">首先验证jdbc链接是否正确 jdbc:mysql://ip:port/dbname?"
        + "user=user&password=password&useUnicode=true&autoReconnect=true&characterEncoding=utf8 然后验证mysql配置 SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; 重点观察mysql配置是否是utf8mb4，如若不是检查/etc/my.cnf是否有以下配置 [client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'   最后检查数据库、表字段定义 ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE table_name CHANGE column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;...</section>
        <footer class="box vertical blog-footer-box">
            <span>jiangwu</span>
            <span>发布于</span>
            <span>1小时前</span>
                        <span>阅读 1</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/bankofchina" style="display:block;">
            <img alt="嘻哈开发者" class="blog-author" data-delay="https://static.oschina.net/uploads/user/701/1402271_50.png?t=1402559376000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/bankofchina/blog/830955" class="sc overh blog-title-link" target='_blank'
               title="elastaticsearch 5.1.2 x-pack 设置权限访问">
                <h2 class="blog-name sc text-ellipsis">elastaticsearch 5.1.2 x-pack 设置权限访问</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">详细文档参考：https://www.elastic.co/guide/en/x-pack/5.2/installing-xpack.html   在elasticsearch.yml文件中加入配置项目xpack.security.enabled: true</section>
        <footer class="box vertical blog-footer-box">
            <span>嘻哈开发者</span>
            <span>发布于</span>
            <span>2小时前</span>
                                                        </footer>
    </div>
</div>
                                                        <div class="box item" data-traceid="blog_area_list_ad_1" data-tracepid="blog_area_list">
    <div class="box-fl">
        <a href="https://www.oschina.net/event/2216742" style="display:block;">
            <img class="blog-author" data-delay="https://static.oschina.net/uploads/space/2017/0109/155506_AL3c_2982602_thumb.png">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://www.oschina.net/event/2216742" class="sc overh blog-title-link" target="_blank" title="全球云计算开源峰会">
                <h2 class="blog-name sc text-ellipsis">“全球云计算开源峰会”将于2017年4月19日－20日在国家会议中心举行！</h2>
            </a>
            <div class="box-fr">
                <span style="line-height: 20px;display: block;width: 36px;text-align: center;color: #fff;border-radius: 2px;background: #cecece;font-size: .75rem;">广告</span>
            </div>
        </header>
        <section class="blog-brief text-gradient">近年来，云计算开源技术逐渐成为云计算发展的重要支撑和导向，改变了以往的信息技术进化模式，引领软件技术标准的发展和创新，深刻影响着整个信息技术产业的发展格局。为进一步探索我国云计算开源技术发展模式，加速云计算与各行业的深度融合，更好地发挥云计算在经济社会创新发展中的支撑和引领作用，促进我国云计算产业快速、健康发展。</section>
        <footer class="box vertical blog-footer-box">
            <span>云计算开源产业联盟</span>
        </footer>
    </div>
</div>
                        <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/2343729" style="display:block;">
            <img alt="超级大江" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1171/2343729_50.jpg?t=1466422885000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/2343729/blog/830954" class="sc overh blog-title-link" target='_blank'
               title="maven pom进阶教程 - 资源文件拷贝插件maven-resources-plugin">
                <h2 class="blog-name sc text-ellipsis">maven pom进阶教程 - 资源文件拷贝插件maven-resources-plugin</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">官方文档 它最常用的两个goal: **resources:resources** 这是process-resources阶段的默认goal, 在不配置任何参数的情况下，将默认使用build.resources中的目录作为源路径，将build.outputDirectory作为目标路径（实际上是这目录下的classes）. **resources:copy-resources** 需要明确的指定源路径和目标路径. 示例如下 ```xml ${project.basedir}/target ${project.basedir}/src/main/resources org.apache.maven.plugins maven-resources-plugin 3.0.2 default-resources validate resources copy2 compile copy-resources ${project.basedir}/target/conf3 src/main/resources3 true **/*.properties ``` filter，见[maven pom进阶教程 - properties、filter](https://my.oschina.net/u/2343729/blog/830919)...</section>
        <footer class="box vertical blog-footer-box">
            <span>超级大江</span>
            <span>发布于</span>
            <span>2小时前</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/jlongtian" style="display:block;">
            <img alt="JlongTian" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1273/2547038_50.jpg?t=1449572964000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/jlongtian/blog/830951" class="sc overh blog-title-link" target='_blank'
               title="@class和循环retain">
                <h2 class="blog-name sc text-ellipsis">@class和循环retain</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">1.@class的作用：仅仅告诉编译器，某个名称是一个类，并不能知道该类有哪些成员变量，哪些方法,引用了哪些头文件 @class不知道该类引用了哪些头文件，因此不会造成互相包含，缺点是不知道类中包含了什么东西 2.开发中引用一个类的规范： 在.h中用@class声明一个类 在.m文件中用#import来包含该类的所有东西（所引用的头文件，成员变量，方法），.m文件一般要用到引用对象的方法和成员变量 注：@class可以提升一下程序的性能，一方面避免了循环引用，另一方面如果该类头文件改了什么东西，引用该类的文件不用重新拷贝一次 3.两端循环retain解决方案 一端用assign，一端用retain    </section>
        <footer class="box vertical blog-footer-box">
            <span>JlongTian</span>
            <span>发布于</span>
            <span>3小时前</span>
                        <span>阅读 1</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/go4it" style="display:block;">
            <img alt="go4it" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1461/2922256_50.jpeg?t=1474523359000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/go4it/blog/830950" class="sc overh blog-title-link" target='_blank'
               title="优雅地关闭kubernetes中的nginx">
                <h2 class="blog-name sc text-ellipsis">优雅地关闭kubernetes中的nginx</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">##SIGINT SIGTERM SIGKILL区别 三者都是结束/终止进程运行。 ###1.SIGINT SIGTERM区别 前者与字符ctrl+c关联，后者没有任何控制字符关联。 前者只能结束前台进程，后者则不是。 ###2.SIGTERM SIGKILL的区别 前者可以被阻塞、处理和忽略，但是后者不可以。KILL命令的默认不带参数发送的信号就是SIGTERM.让程序有好的退出。因为它可以被阻塞，所以有的进程不能被结束时，用kill发送后者信号，即可。即：kill-9 进程号。 ![输入图片说明](https://static.oschina.net/uploads/img/201702/01094056_aeV0.png "在这里输入图片标题") ##docker stop与docker kill ###docker stop 当我们用docker stop命令来停掉容器的时候，docker默认会允许容器中的应用程序有10秒的时间用以终止运行。 在docker stop命令执行的时候，会先向容器中PID为1的进程(`main process`)发送系统信号SIGTERM，然后等待容器中的应用程序终止执行，如果等待时间达到设定的超时时间，或者默认的10秒，会继续发送SIGKILL的系统信号强行kill掉进程。在容器中的应用程序，可以选择忽略和不处理SIGTERM信号，不过一旦达到超时时间，程序就会被系统强行kill掉，因为SIGKILL信号是直接发往系统内核的，应用程序没有...</section>
        <footer class="box vertical blog-footer-box">
            <span>go4it</span>
            <span>发布于</span>
            <span>4小时前</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/jimilee" style="display:block;">
            <img alt="无寄语" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1429/2858189_50.jpg?t=1471052197000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/jimilee/blog/830949" class="sc overh blog-title-link" target='_blank'
               title="解读分库分表中间件Sharding-JDBC">
                <h2 class="blog-name sc text-ellipsis">解读分库分表中间件Sharding-JDBC</h2>
            </a>
                                                    <span class="blog-tag zhuan">转</span>
                    </header>
        <section class="blog-brief text-gradient">数据库分库分表从互联网时代开启至今，一直是热门话题。在NoSQL横行的今天，关系型数据库凭借其稳定、查询灵活、兼容等特性，仍被大多数公司作为首选数据库。因此，合理采用分库分表技术应对海量数据和高并发对数据库的冲击，是各大互联网公司不可避免的问题。 虽然很多公司都致力于开发自己的分库分表中间件，但截止目前，仍无完美的开源解决方案覆盖此领域。</section>
        <footer class="box vertical blog-footer-box">
            <span>无寄语</span>
            <span>发布于</span>
            <span>4小时前</span>
                        <span>阅读 3</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/2397560" style="display:block;">
            <img alt="CloudMAN" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1198/2397560_50.jpg?t=1456640647000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/2397560/blog/830948" class="sc overh blog-title-link" target='_blank'
               title="将 ext_net 连接到 router - 每天5分钟玩转 OpenStack（145）">
                <h2 class="blog-name sc text-ellipsis">将 ext_net 连接到 router - 每天5分钟玩转 OpenStack（145）</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">上一节完我们创建了外部网络 ext_net，接下来需要将其连接到 Neutron 的虚拟路由器，这样 instance 才能访问外网。</section>
        <footer class="box vertical blog-footer-box">
            <span>CloudMAN</span>
            <span>发布于</span>
            <span>7小时前</span>
                        <span>阅读 2</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/rst" style="display:block;">
            <img alt="fromdtor" class="blog-author" data-delay="https://static.oschina.net/uploads/user/136/273719_50.jpg?t=1392698904000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/rst/blog/830947" class="sc overh blog-title-link" target='_blank'
               title="python实现埃拉托塞尼筛法">
                <h2 class="blog-name sc text-ellipsis">python实现埃拉托塞尼筛法</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">简单的使用python实现埃拉托塞尼筛法的步骤及思路</section>
        <footer class="box vertical blog-footer-box">
            <span>fromdtor</span>
            <span>发布于</span>
            <span>9小时前</span>
                        <span>阅读 2</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/3069003" style="display:block;">
            <img alt="放空迭代" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1534/3069003_50.jpg?t=1485890170000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/3069003/blog/830945" class="sc overh blog-title-link" target='_blank'
               title="学习数据结构的原因&方法">
                <h2 class="blog-name sc text-ellipsis">学习数据结构的原因&方法</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">问题：数据结构是干什么用的呢？ 我们这学期开数据结构C语言版，已经过去半学期了，还是没有头绪。去年已经学过C与C++了，觉得已经可以编写程序了呀？然后我们为什么还要学习数据结构呢？学习什么链表，插入删除数据，看代码，觉得很复杂。这是干什么用的呢？C或C++里不就已经可以插入数据，存储数据么？建个数组，运用指针不就可以很方便么？还要费这劳什子自己写一大串代码就是为了建个链表能存两个数据？ 回答一： 链表的好处在于不用使用连续的内存，而是利用内存中分散的存储单元存储数据；而且链表的长度是可以任意增删的，但数组一旦申请就不能改变，这根本不能满足数据的动态存储；再加上数组的删除和插入元素会使大片的数据进行移动，这就增加了运算量； 好好学吧，刚开始我也觉得稀里糊涂的，但考研不得不再看了几遍，觉的数据结构的思想还是很好的，不说各种排序和图、二叉树的算法设计，单单一个栈就是很深奥的，他可以将一些复杂难懂的递归算法，拆解改写，让你对这些算法一目了然。自己好好体会吧，有些东西并不向你看到的那么简单。 回答二： 数据结构是一种思想工具，就像我们用杯子喝水，用筷子吃饭一样，这里的杯子和筷子就是数据结构，如果我们不具有这...</section>
        <footer class="box vertical blog-footer-box">
            <span>放空迭代</span>
            <span>发布于</span>
            <span>11小时前</span>
                        <span>阅读 1</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/tasker" style="display:block;">
            <img alt="codetask" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1159/2319385_50.jpeg?t=1482868909000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/tasker/blog/830944" class="sc overh blog-title-link" target='_blank'
               title="关于x64系统内的重定向文件夹 SysWow64 ">
                <h2 class="blog-name sc text-ellipsis">关于x64系统内的重定向文件夹 SysWow64 </h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">32 位程序获取 system32 目录时会转向SysWow64  也就是说，虽然你打开文件指明路径是 system32，但实际上打开的是 SysWoW64 下的对应文件 这个需要用到这几个 API 来控制是否进行重定向： Wow64EnableWow64FsRedirection Wow64DisableWow64FsRedirection Wow64RevertWow64FsRedirection</section>
        <footer class="box vertical blog-footer-box">
            <span>codetask</span>
            <span>发布于</span>
            <span>12小时前</span>
                        <span>阅读 1</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/didispace" style="display:block;">
            <img alt="程序猿DD" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1326/2653610_50.jpg?t=1456537598000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/didispace/blog/830942" class="sc overh blog-title-link" target='_blank'
               title="Spring Boot 1.5.x新特性：动态修改日志级别">
                <h2 class="blog-name sc text-ellipsis">Spring Boot 1.5.x新特性：动态修改日志级别</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">前天Spring Boot 1.5终于迎来了第一个RELEASE版本：1.5.0，但是由于[一个编译依赖问题](https://github.com/spring-projects/spring-boot/issues/8136)在第二天直接连击到了1.5.1。该版本的发布包含了超过320位贡献者的奉献、10000多次的代码提交。 每次Spring Boot版本更新所带来的新特性都是我们每个用户特别关注的。虽然其中不少特性可能对于大部分用户来说还不一定适用，但是作为基础知识的储备还是有一定的必要性。对于1.5.x版本的新特性列表读者可以直接查看官方博文：[《Spring Boot 1.5.1 released》](https://spring.io/blog/2017/01/30/spring-boot-1-5-1-released)来了解它们，本文不做这些概要性的介绍。在后续的一段时间内，本博客将会陆续介绍一些笔者关心且将会使用的关于Spring Boot 1.5.x中的一些新特性。 ## loggers端点 本文我们就来看看Spring Boot 1.5.x中引入的一个新的控制端点：`/loggers`，该端点将为我们提供动态修改Spring Boot应用日志级别的强大功能。该功能的使用非常简单，它依然延续了Spring Boot自动化配置的实现，所以只需要在引入了`spring-boot-starter-actuator`依赖的条件下就会自动开启该端点的功能（更多关于`spring-boot-starte...</section>
        <footer class="box vertical blog-footer-box">
            <span>程序猿DD</span>
            <span>发布于</span>
            <span>13小时前</span>
                        <span>阅读 341</span>
                                    <span>评论 2</span>
                                            </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/2450666" style="display:block;">
            <img alt="杰克鹏仔" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1225/2450666_50.jpg?t=1457365143000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/2450666/blog/830938" class="sc overh blog-title-link" target='_blank'
               title="读书笔记 — Java高并发程序设计 — 第二章 — 基础（上）">
                <h2 class="blog-name sc text-ellipsis">读书笔记 — Java高并发程序设计 — 第二章 — 基础（上）</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">1 有关线程的一些事     线程的所有状态都在Thread中的State枚举中定义： public enum State {
        /**
         * Thread state for a thread which has not yet started.
         */
        NEW,

        /**
         * Thread state for a runnable thread.  A thread in the runnable
         * state is executing in the Java virtual machine but it may
         * be waiting for other resources from the operating system
         * such as processor.
         */
        RUNNABLE,

        /**
         * Thread state for a thread blocked waiting for a monitor lock.
         * A thread in the blocked state is waiting for a monitor lock
         * to enter a synchronized block/method or
         * reenter a synchronized block/method after calling
         * {@link Object#wait() Object.wait}.
         */
        BLOCKED,

        /**
         * Thread state for a waiting thread.
         * A thread is in the waiting state due to calling one of the
         * following methods:
         * &lt;ul&gt;
 ...</section>
        <footer class="box vertical blog-footer-box">
            <span>杰克鹏仔</span>
            <span>发布于</span>
            <span>14小时前</span>
                        <span>阅读 4</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/yxmBetter" style="display:block;">
            <img alt="YXMBetter" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1617/3234420_50.jpeg?t=1484884431000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/yxmBetter/blog/830935" class="sc overh blog-title-link" target='_blank'
               title="CSS初识(私有前缀,属性/伪类/伪元素选择器,颜色,文本,边框圆角/阴影/图片)">
                <h2 class="blog-name sc text-ellipsis">CSS初识(私有前缀,属性/伪类/伪元素选择器,颜色,文本,边框圆角/阴影/图片)</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">了解了html5中html部分的提升，接下来，看一下CSS3吧！ ### CSS3的现状 + 浏览器支持程度差，需要添加私有前缀 - 通过[caniuse](http://caniuse.com/)可查询CSS3各特性的支持程度，一般兼容性处理的常见方法是为属性添加私有前缀，如不能解决，应避免使用，无需刻意去处理CSS3的兼容性问题。 ```html ``` + 移动端支持优于PC端 + 不断改进中 + 应用相对广泛 ### 手册 + [] 表示全部可选项 + || 表示或者 + | 表示多选一 + ？ 表示0个或者1个 + * 表示0个或者多个 + {} 表示范围 ### 选择器 CSS3选择器与jQuery中所提供的绝大部分选择器兼容。 #### 属性选择器 通过属性来选择元素，具体有以下5种形式： + E[attr] 表示存在attr属性即可; + E[attr=val] 表示属性值完全等于val; + E[attr*=val] 表示的属性值里包含val字符并且在"任意"位置; + E[attr^=val] 表示的属性值里包含val字符并且在"开始"位置; + E[attr$=val] 表示的属性值里包含val字符并且在"结束"位置; + 也要考虑到权重的问题。 ```css /*[attribute] 只要标签里面有这个属性就能选中 $('[class]')*/ [class]{ color: red; } /*[attribute=value] 有这个属性并且它的值完全等于value $('[class=value]')*/ [cla...</section>
        <footer class="box vertical blog-footer-box">
            <span>YXMBetter</span>
            <span>发布于</span>
            <span>15小时前</span>
                        <span>阅读 3</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/whforever" style="display:block;">
            <img alt="hell03W" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1250/2501614_50.png?t=1455777078000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/whforever/blog/830933" class="sc overh blog-title-link" target='_blank'
               title="设计模式-中介者模式">
                <h2 class="blog-name sc text-ellipsis">设计模式-中介者模式</h2>
            </a>
                                                    <span class="blog-tag zhuan">转</span>
                    </header>
        <section class="blog-brief text-gradient"># 1. 中介者模式概述 如果系统中很多的对象, 对象之间呈现网状结构, 每个对象都与系统中其它多个对象有联系, 每个对象都与其它对象直接耦合在一起, 会导致系通过过度耦合. 如下图所示: ![](http://img.my.csdn.net/uploads/201301/08/1357651860_8819.jpg) 中介者模式可以使对象之间的关系数量急剧减少, 通过引入中介者对象, 可以将系统中的网状结构变成以中介者为中心的星形结构, 如下图所示: ![](http://img.my.csdn.net/uploads/201301/08/1357651865_7741.jpg) 如果在一个系统中对象之间存在多对多的相互关系, 我们可以将对象之间的一些交互行为从各个对象中分离出来, 并集中封装在一个中介者对象中, 并由该中介者统一协调, 这样对象之间多对多的复杂关系就转化成为相对简单的一对多关系. 通过引入中介者对象来简化对象之间的复杂交互, 中介者模式是"迪米特法则"的一个典型应用. **中介者模式: 用一个中介对象(中介者)来封装一系列的对象交互, 中介者使个对象不需要显式的相互引用, 从而使其耦合松散, 而且可以独立的改变他们之间的交互. 中介者模式又称为调停者模式, 它是一种对象行为型模式. ** !()[http://img.my.csdn.net/uploads/201301/08/1357651874_7064.jpg] ...</section>
        <footer class="box vertical blog-footer-box">
            <span>hell03W</span>
            <span>发布于</span>
            <span>15小时前</span>
                        <span>阅读 2</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/charlock" style="display:block;">
            <img alt="夏洛特_" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1349/2698055_50.jpeg?t=1477965328000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/charlock/blog/830927" class="sc overh blog-title-link" target='_blank'
               title="catic">
                <h2 class="blog-name sc text-ellipsis">catic</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">1.监控系统   流程概述 2.SNMP   2.1 流程概述   2.11 MIB管理信息库   被监控主机-对象名称和OID信息关联表   2.12 监控内容   【Fault Management】故障管理   【Configuration Management】配置管理   【Accounting Management】计账管理   【Performance Management】性能管理   【Security Management】安全管理   2.13 community   Agent内置   【public】 只读   【private】读写   2.14 指令(报文)   【get】获取指令，单个具体对象   【getnext】节点下所有对象   【getbulk】节点下所有子节点下的所有对象   【set】操作指令   2.2 SNMP应用   【net-snmp】Agent （162端口）   【net-snmp-utils】NMS & trap （161端口）   2.21安装snmp [Lock@LockLinux ~]$sudo yum install net-snmp net-snmp-utils # 安装
[Lock@LockLinux ~]$sudo service snmpd start # 启动服务
[Lock@LockLinux ~]$sudo netstat -unlp # 查看对应端口
[Lock@LockLinux ~]$sudo snmpwalk -v 2c -c public localhost host
                获取节点下所有 -v 指定snmp版本 -c 指定comunity版本 指定主机 指定对象   2.22 监控命令 [Lock@LockLinux ~]$sudo snmpge...</section>
        <footer class="box vertical blog-footer-box">
            <span>夏洛特_</span>
            <span>发布于</span>
            <span>16小时前</span>
                        <span>阅读 1</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/268088" style="display:block;">
            <img alt="球球" class="blog-author" data-delay="https://static.oschina.net/uploads/user/134/268088_50.jpg?t=1482572132000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/268088/blog/830922" class="sc overh blog-title-link" target='_blank'
               title="HashMap原理和代码浅析">
                <h2 class="blog-name sc text-ellipsis">HashMap原理和代码浅析</h2>
            </a>
                                                    <span class="blog-tag zhuan">转</span>
                    </header>
        <section class="blog-brief text-gradient">hashCode介绍 分析HashMap之前先介绍下什么Hashcode(散列码)。它是一个int，每个对象都会有一个hashcode，它在内存的存放位置是放在对象的头部（对象头部存放的信息有hashcode，指向Class的引用，和一些有关垃圾回收信息）。需要注意的是，如果在你的类中覆盖了Object的equals(Object)方法，那么你必须覆盖hashCode方法，不然，当你使用HashMap，HashSet，HashTable时会出现问题。这个问题在《effective Java中文版》这本书里面有详细的介绍。下面只是简要摘除来3个主要的原因 （摘自Object规范）：  （1）在程序的执行期间，只要对象的equals方法的比较操作所用到的信息没有被修改，那么对这同一对象调用多次，hashCode方法必须始终如一的返回同一个值，在同一个应用的多次执行过程中，每次执行所返回的值可以不同。  （2）如果两个对象，根据equas方法比较是想法的，那么掉哦你给这两个对象中任意一个对象的hashCode方法都必须产生相同的整数结果。  （3）如果两个对象根据equals方法比较是不相等的，那么调用这两个对象中任意一个对象的hashCode方法，则不一定要产生不同的整数结果，但是程序员应该知道，给不同的对象产生截然不同的整数结果，有可能提高散列表的性...</section>
        <footer class="box vertical blog-footer-box">
            <span>球球</span>
            <span>发布于</span>
            <span>16小时前</span>
                        <span>阅读 3</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/puzhiyuan" style="display:block;">
            <img alt="laohng1995" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1347/2695029_50.jpg?t=1459385837000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/puzhiyuan/blog/830921" class="sc overh blog-title-link" target='_blank'
               title="python持久化日常学习(二)">
                <h2 class="blog-name sc text-ellipsis">python持久化日常学习(二)</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                            </header>
        <section class="blog-brief text-gradient">class Person:
    """
    一般person：数据+逻辑
    """
    def __init__(self,name,age,pay=0,job=None):            #初始化
        self.name=name
        self.age=age
        self.pay=pay
        self.job=job
    def lastName(self):
        return self.name.split()[-1]
    def giveRaise(self,percent):
        self.pay *=(1.0+percent)
    def __str__(self):                                     #相当于Java中的toString方法
        return ('&lt;%s=&gt;%s:%s,%s&gt;'%(self.__class__.__name__,self.name,self.job,self.pay))

class Manage(Person):
    def __init__(self,name,age,pay):
        Person.__init__(self,name,age,pay,"manage")   #若没有输入pay的值TypeError: can't multiply sequence by non-int of type 'float'
    def giveRaise(self,percent,b=0.1):
        Person.giveRaise(self,percent+b)

if __name__=="__main__":
    bob=Person('Bob Smith',44)
    sue=Person("Sue jone",47,4000,'hardware')
    tom=Manage("tom",age=50,pay=50000)
    print(sue,sue.pay,sue.lastName())
    for obj in (bob,sue,tom):
 ...</section>
        <footer class="box vertical blog-footer-box">
            <span>laohng1995</span>
            <span>发布于</span>
            <span>17小时前</span>
                        <span>阅读 4</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/2935389" style="display:block;">
            <img alt="希尔瓦娜斯" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1467/2935389_50.jpeg?t=1475687077000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/2935389/blog/830920" class="sc overh blog-title-link" target='_blank'
               title=" ConcurrentHashMap、synchronized与线程安全">
                <h2 class="blog-name sc text-ellipsis"> ConcurrentHashMap、synchronized与线程安全</h2>
            </a>
                                                    <span class="blog-tag zhuan">转</span>
                    </header>
        <section class="blog-brief text-gradient">最近做的项目中遇到一个问题：明明用了ConcurrentHashMap，可是始终线程不安全 除去项目中的业务逻辑，简化后的代码如下： public class Test40 {  
  
    public static void main(String[] args) throws InterruptedException {  
        for (int i = 0; i &lt; 10; i++) {  
            System.out.println(test());  
        }  
    }  
      
    private static int test() throws InterruptedException {  
        ConcurrentHashMap&lt;String, Integer&gt; map = new ConcurrentHashMap&lt;String, Integer&gt;();  
        ExecutorService pool = Executors.newCachedThreadPool();  
        for (int i = 0; i &lt; 8; i++) {  
            pool.execute(new MyTask(map));  
        }  
        pool.shutdown();  
        pool.awaitTermination(1, TimeUnit.DAYS);  
          
        return map.get(MyTask.KEY);  
    }  
}  
  
class MyTask implements Runnable {  
      
    public static final String KEY = "key";  
      
    private ConcurrentHashMap&lt;String, Integer&gt; map;  
      
    public MyTask(ConcurrentHashMap&lt;String, Integer&gt;...</section>
        <footer class="box vertical blog-footer-box">
            <span>希尔瓦娜斯</span>
            <span>发布于</span>
            <span>17小时前</span>
                        <span>阅读 1</span>
                                                        </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/3002328" style="display:block;">
            <img alt="linux小陶" class="blog-author" data-delay="https://www.oschina.net/img/portrait.gif">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/3002328/blog/830911" class="sc overh blog-title-link" target='_blank'
               title="Tomcat7安装基于jdk 1.7环境">
                <h2 class="blog-name sc text-ellipsis">Tomcat7安装基于jdk 1.7环境</h2>
            </a>
                                                    <span class="blog-tag zhuan">转</span>
                    </header>
        <section class="blog-brief text-gradient">这篇文章着重讲解tomcat7的安装，首先需要下载tomcat包和相应的jdk，如果你的系统是32位，那么下载x86的jdk，如果是64位的系统，那么下载X64的JDK。</section>
        <footer class="box vertical blog-footer-box">
            <span>linux小陶</span>
            <span>发布于</span>
            <span>18小时前</span>
                        <span>阅读 2</span>
                                                        </footer>
    </div>
</div>
                <a class="hide" href="https://static.oschina.net/action/ajax/get_more_recent_blog?classification=0&amp;p=2"></a>
    </div>



<div id="topsOfDaily" class="blog-list hide">
                                                        <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/2541538" style="display:block;">
            <img alt="Acce1erator" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1270/2541538_50.jpg?t=1449037391000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/2541538/blog/829862" class="sc overh blog-title-link" target='_blank'
               title="Java借助CountDownLatch完成异步回调">
                <h2 class="blog-name sc text-ellipsis">Java借助CountDownLatch完成异步回调</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">public class AsyncDemo {

    private static void doSomeTask() {
        System.out.println("Hello World");
    }

    private static void onCompletion() {
        System.out.println("All tasks finished");
    }

    public static void main(String[] args) {
        ExecutorService executor = Executors.newCachedThreadPool();
        final CountDownLatch latch = new CountDownLatch(2);

        executor.execute(new Task(latch));
        executor.execute(new Task(latch));

        executor.execute(() -&gt; {
            try {
                latch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            onCompletion();
        });
        executor.shutdown();
    }

    private static class Task implements Runnable {

        /**
         * CountDownLatch 是JDK提供的一个简单的线程监测工具
         * 基于简单的计数，调用countDown()方法表明当前线程已经终止
         * 在监测线程中调用await()方法,该方法会一直挂起直到所有其它线程终止...</section>
        <footer class="box vertical blog-footer-box">
            <span>Acce1erator</span>
            <span>发布于</span>
            <span>1周前</span>
                        <span>阅读 1272</span>
                                    <span>评论 2</span>
                                            </footer>
    </div>
</div>
                                                        <div class="box item" data-traceid="blog_area_list_ad_1" data-tracepid="blog_area_list">
    <div class="box-fl">
        <a href="https://www.oschina.net/event/2216742" style="display:block;">
            <img class="blog-author" data-delay="https://static.oschina.net/uploads/space/2017/0109/155506_AL3c_2982602_thumb.png">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://www.oschina.net/event/2216742" class="sc overh blog-title-link" target="_blank" title="全球云计算开源峰会">
                <h2 class="blog-name sc text-ellipsis">“全球云计算开源峰会”将于2017年4月19日－20日在国家会议中心举行！</h2>
            </a>
            <div class="box-fr">
                <span style="line-height: 20px;display: block;width: 36px;text-align: center;color: #fff;border-radius: 2px;background: #cecece;font-size: .75rem;">广告</span>
            </div>
        </header>
        <section class="blog-brief text-gradient">近年来，云计算开源技术逐渐成为云计算发展的重要支撑和导向，改变了以往的信息技术进化模式，引领软件技术标准的发展和创新，深刻影响着整个信息技术产业的发展格局。为进一步探索我国云计算开源技术发展模式，加速云计算与各行业的深度融合，更好地发挥云计算在经济社会创新发展中的支撑和引领作用，促进我国云计算产业快速、健康发展。</section>
        <footer class="box vertical blog-footer-box">
            <span>云计算开源产业联盟</span>
        </footer>
    </div>
</div>
                        <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/2328699" style="display:block;">
            <img alt="DiamondFsd" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1164/2328699_50.jpeg?t=1458279949000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/2328699/blog/829503" class="sc overh blog-title-link" target='_blank'
               title="Let&apos;s Encrypt 使用教程，免费的SSL证书，让你的网站拥抱 HTTPS">
                <h2 class="blog-name sc text-ellipsis">Let's Encrypt 使用教程，免费的SSL证书，让你的网站拥抱 HTTPS</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">这篇文章主要讲的就是如何让自己的网站免费从HTTP升级为HTTPS，使用的是 [Let's Encrypt](https://letsencrypt.org/)的证书。实际上也就是一个Let's Encrypt 免费证书获取教程 。 为什么要上HTTPS，说一个小故事。 &gt; 从前有个网站，后来有个广告，没了 作为一个博客，自然不想让在被别人浏览的时候，出现莫名的广告（[运营商劫持](https://www.google.com.hk/webhp?hl=zh-CN&sourceid=cnhp&gws_rd=ssl#safe=strict&hl=zh-CN&q=%E8%BF%90%E8%90%A5%E5%95%86%E5%8A%AB%E6%8C%81)）。这时候，HTTPS的价值就体现出来了。 HTTPS的好处还有很多，但单单这一条，就够我花心思去升级了。 （其实主要目的是提升网站Biger :） ## Let's Encrypt 简介 如果要启用HTTPS，我们就需要从证书授权机构(以下简称CA) 处获取一个证书，Let's Encrypt 就是一个 CA。我们可以从 Let's Encrypt 获得网站域名的免费的证书。这篇文章也主要讲的是通过 Let's Encrypt + Nginx 来让网站升级到HTTPS。 ## Certbot 简介 [Certbot](https://certbot.eff.org) 是Let's Encrypt官方推荐的获取证书的客户端，可以帮我们获取免费的Let's Encrypt 证书。Certbot 是支持所有 Unix 内核的操作系统的，个人博客的...</section>
        <footer class="box vertical blog-footer-box">
            <span>DiamondFsd</span>
            <span>发布于</span>
            <span>1周前</span>
                        <span>阅读 2972</span>
                                    <span>评论 28</span>
                                    <span>点赞 13</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/xiandafu" style="display:block;">
            <img alt="闲大赋" class="blog-author" data-delay="https://static.oschina.net/uploads/user/283/567839_50.jpeg?t=1481861743000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/xiandafu/blog/829499" class="sc overh blog-title-link" target='_blank'
               title="没看懂“重新定义模板引擎”？">
                <h2 class="blog-name sc text-ellipsis">没看懂“重新定义模板引擎”？</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">比较了JFina3.0新的模板引擎功能与Beetl的功能对比</section>
        <footer class="box vertical blog-footer-box">
            <span>闲大赋</span>
            <span>发布于</span>
            <span>1周前</span>
                        <span>阅读 4031</span>
                                    <span>评论 126</span>
                                    <span>点赞 43</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/1757198" style="display:block;">
            <img alt="流浪的木马" class="blog-author" data-delay="https://static.oschina.net/uploads/user/878/1757198_50.jpeg?t=1482816164000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/1757198/blog/827628" class="sc overh blog-title-link" target='_blank'
               title="SpringSecurity安全性框架实战">
                <h2 class="blog-name sc text-ellipsis">SpringSecurity安全性框架实战</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">SpringSecurity是基于Spring的应用程序提供声明式安全保护的安全性框架</section>
        <footer class="box vertical blog-footer-box">
            <span>流浪的木马</span>
            <span>发布于</span>
            <span>2周前</span>
                        <span>阅读 3039</span>
                                    <span>评论 16</span>
                                    <span>点赞 5</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/OutOfMemory" style="display:block;">
            <img alt="ksfzhaohui" class="blog-author" data-delay="https://static.oschina.net/uploads/user/79/159239_50.png?t=1471773200000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/OutOfMemory/blog/826689" class="sc overh blog-title-link" target='_blank'
               title="基于ELK5.1(ElasticSearch, Logstash, Kibana)的一次整合测试">
                <h2 class="blog-name sc text-ellipsis">基于ELK5.1(ElasticSearch, Logstash, Kibana)的一次整合测试</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">前言 开源实时日志分析ELK平台(ElasticSearch, Logstash, Kibana组成)，能很方便的帮我们收集日志，进行集中化的管理，并且能很方便的进行日志的统计和检索，下面基于ELK的最新版本5.1进行一次整合测试。 ElasticSearch 1.概述： ElasticSearch是一个高可扩展的开源的全文搜索分析引擎。它允许你快速的存储、搜索和分析大量数据。ElasticSearch通常作为后端程序，为需要复杂查询的应用提供服务。 Elasticsearch是一个基于Lucene的开源分布式搜索引擎，具有分布式多用户能力。Elasticsearch是用java开发，提供Restful接口，能够达到实时搜索、高性能计算；同时Elasticsearch的横向扩展能力非常强，不需要重启服务，基本上达到了零配置。 2.解压ElasticSearch并进入目录： unzip elasticsearch-5.1.1.zip 
cd elasticsearch-5.1.1 3.启动ElasticSearch服务： ./bin/elasticsearch 因为这里使用的是root账号进行启动服务的，所以会报如下错误：         at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-5.1.1.jar:5.1.1]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearc...</section>
        <footer class="box vertical blog-footer-box">
            <span>ksfzhaohui</span>
            <span>发布于</span>
            <span>2周前</span>
                        <span>阅读 2373</span>
                                    <span>评论 8</span>
                                    <span>点赞 8</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/wangxincj" style="display:block;">
            <img alt="老虎是个蛋蛋" class="blog-author" data-delay="https://static.oschina.net/uploads/user/470/940346_50.jpeg?t=1484558829000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/wangxincj/blog/825838" class="sc overh blog-title-link" target='_blank'
               title="在SpringBoot中集成Redis">
                <h2 class="blog-name sc text-ellipsis">在SpringBoot中集成Redis</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">    上篇介绍了 Spring-data-jpa一些使用方法，都是基于mysql数据库来讲解的，但是在实际项目中，由于访问量的不断增大，数据库的压力会越来越大，这时候类似于mysql的数据库往往只是为了兜底或者在降级时才会有查询操作，大部分的读操作都会集中在缓存或者像elasticsearch这种全文搜索引擎，本篇主要介绍一下如何在SpringBoot中使用Redis，后续会介绍如何集成elasticsearch  1、添加Redis起步依赖 &lt;dependency&gt;
    &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
    &lt;artifactId&gt;spring-boot-starter-redis&lt;/artifactId&gt;
&lt;/dependency&gt; 2、添加Redis相关配置 spring:
  redis:
    host: localhost
    port: 6379
    pool:
      max-idle: 100
      min-idle: 1
      max-active: 1000
      max-wait: -1 3、编写Redis配置类 @Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

    /**
     * 生成key的策略
     * @return
     */
    @Bean
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            @Override
            public Object generate(Object target, Method m...</section>
        <footer class="box vertical blog-footer-box">
            <span>老虎是个蛋蛋</span>
            <span>发布于</span>
            <span>2周前</span>
                        <span>阅读 3791</span>
                                    <span>评论 12</span>
                                    <span>点赞 5</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/z707z" style="display:block;">
            <img alt="邹海清" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1493/2987239_50.jpeg?t=1483522584000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/z707z/blog/824830" class="sc overh blog-title-link" target='_blank'
               title="免费个人博客搭建教程（详细-图文）--Hexo+OSChina">
                <h2 class="blog-name sc text-ellipsis">免费个人博客搭建教程（详细-图文）--Hexo+OSChina</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">本人作为一个屌丝程序员，**年少无为，卖马为生**，买不起服务器，买不起域名，但是又想拥有属于自己的博客网站，那就只有通过技术来实现这一切了。先上成果：[点击](http://z77z.oschina.io/)，现在我把我自己搭建博客的过程共享出来，只要你按照步骤一步步走下去，一定会搭建成功，如果大家在搭建过程中遇到什么问题，欢迎在我的博客评论区留言，也欢迎大神进来，教我做码，带我装逼，带我飞。**[博客地址](http://z77z.oschina.io/)**，JUST DO IT(`离开舒适区`)。</section>
        <footer class="box vertical blog-footer-box">
            <span>邹海清</span>
            <span>发布于</span>
            <span>3周前</span>
                        <span>阅读 5778</span>
                                    <span>评论 93</span>
                                    <span>点赞 17</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/ljc94" style="display:block;">
            <img alt="黎嘉诚" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1125/2250656_50.jpeg?t=1484375001000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/ljc94/blog/824632" class="sc overh blog-title-link" target='_blank'
               title="Linux服务器安装Oracle服务端总结">
                <h2 class="blog-name sc text-ellipsis">Linux服务器安装Oracle服务端总结</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">通过ssh远程连接linux服务器，上传Oracle11g的安装包，在无图形化界面的情况，安装Oracle服务器端。本例中linux服务器系统为CentOS6.5.</section>
        <footer class="box vertical blog-footer-box">
            <span>黎嘉诚</span>
            <span>发布于</span>
            <span>3周前</span>
                        <span>阅读 2627</span>
                                    <span>评论 25</span>
                                    <span>点赞 3</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/u/867417" style="display:block;">
            <img alt="爱吃大肉包" class="blog-author" data-delay="https://static.oschina.net/uploads/user/433/867417_50.jpeg?t=1484405591000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/u/867417/blog/824549" class="sc overh blog-title-link" target='_blank'
               title="一个大对象引起的血案，GC的踩坑实录">
                <h2 class="blog-name sc text-ellipsis">一个大对象引起的血案，GC的踩坑实录</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">踩过很多次GC的坑，基本每次性能问题，除了数据库，其它高发地区就是GC问题了</section>
        <footer class="box vertical blog-footer-box">
            <span>爱吃大肉包</span>
            <span>发布于</span>
            <span>3周前</span>
                        <span>阅读 4900</span>
                                    <span>评论 15</span>
                                    <span>点赞 4</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/waylau" style="display:block;">
            <img alt="waylau" class="blog-author" data-delay="https://static.oschina.net/uploads/user/426/853151_50.jpg?t=1455675260000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/waylau/blog/821679" class="sc overh blog-title-link" target='_blank'
               title="使用 TeamCity 实现持续集成（CI）">
                <h2 class="blog-name sc text-ellipsis">使用 TeamCity 实现持续集成（CI）</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">持续集成（Continuous Integration），也就是我们经常说的 CI，是现代软件开发技术的基础。本文论述了如何使用 TeamCity 持续集成工具来实现项目的持续集成。</section>
        <footer class="box vertical blog-footer-box">
            <span>waylau</span>
            <span>发布于</span>
            <span>3周前</span>
                        <span>阅读 2344</span>
                                    <span>评论 15</span>
                                    <span>点赞 4</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/wangzhonnew" style="display:block;">
            <img alt="巨杉数据库" class="blog-author" data-delay="https://static.oschina.net/uploads/user/732/1464612_50.jpeg?t=1482722393000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/wangzhonnew/blog/821557" class="sc overh blog-title-link" target='_blank'
               title="【技术解密】SequoiaDB复制组选举原理说明">
                <h2 class="blog-name sc text-ellipsis">【技术解密】SequoiaDB复制组选举原理说明</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">1.SequoiaDB介绍 SequoiaDB是国内一款自主研发的分布式文档型数据库。它与过去开发者所熟悉的关系型数据库不同，它的数据结构是BSON类型，一种与JSON结构非常相近的数据类型。 SequoiaDB与关系型数据库除了在数据类型上有比较明显的差异外，还原生支持分布式存储。用户在搭建一个能够应对海量数据以及包含高并发操作的系统时，不再需要像过去一样，在业务层面做复杂的分表分库工作，直接在定义数据表时，明确告诉数据库此表需要根据哪个字段以及何种规则进行分布式存储，数据分布式存储对于用户来说变得透明。用户可以更加专注以业务逻辑开发，而不是关注如何分表分库。 2.SequoiaDB总体架构介绍   图1：SequoiaDB 总体架构示意图 SequoiaDB整个集群中，主要角色构成是三个，协调节点，编目节点和数据节点。 1.1 协调节点 协调节点（英文称呼为Coord），是SequoiaDB的任务分发节点（一般用户成为Master节点），本身不存储任何数据，主要负责接收应用程序的访问请求。所以一般用户在与SequoiaDB打交道时，访问的都是协调节点，对于其他角色的节点，一般情况下是不建议用户去访问的。 在SequoiaDB老版本中，协调节点在数据库集群中是类似孤岛式部署的。怎么说呢，主要因为...</section>
        <footer class="box vertical blog-footer-box">
            <span>巨杉数据库</span>
            <span>发布于</span>
            <span>3周前</span>
                        <span>阅读 786</span>
                                                <span>点赞 1</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/wwnick" style="display:block;">
            <img alt="博卡君" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1457/2915469_50.jpeg?t=1474620556000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/wwnick/blog/821064" class="sc overh blog-title-link" target='_blank'
               title="小程序如约而至，微信小程序玩法大起底！！">
                <h2 class="blog-name sc text-ellipsis">小程序如约而至，微信小程序玩法大起底！！</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">博卡君的小程序使用教程</section>
        <footer class="box vertical blog-footer-box">
            <span>博卡君</span>
            <span>发布于</span>
            <span>3周前</span>
                        <span>阅读 7021</span>
                                    <span>评论 9</span>
                                    <span>点赞 5</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/zjzhai" style="display:block;">
            <img alt="翟志军" class="blog-author" data-delay="https://static.oschina.net/uploads/user/90/181141_50.jpeg?t=1473697032000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/zjzhai/blog/819619" class="sc overh blog-title-link" target='_blank'
               title="一个热词推荐的简单实现">
                <h2 class="blog-name sc text-ellipsis">一个热词推荐的简单实现</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">#### 为什么想做这个东西 一直好奇像亚马逊这类网站的搜索是如何做到推荐的，最近刚好看到一篇文章：[Redis 与搜索热词推荐](http://blog.jobbole.com/95780/)，然而只写了思路。所以，就是想自己实现一个。 先上个效果图，再聊： ![xxx](https://showme.codes/assets/images/index.lsp.gif) P.S. 按四年前，要写这样的前端效果，对于我这个后台开发，还是挺困难的。而现在，简单的学了下Vue.js，再加上同事的小小指点，就搞定了。😂 #### 热词推荐的本质 假如你预先就知道了用户输入：s、sz、shen、深这些字时，就是想搜“深圳”，那是不是说，我们只要提前将这些字放到一个Map结构中，将用户的输入想像出一个key，value就是“深圳”。 说到底，热词推荐的本质就是一个大大的Map。**难点就在于如何更新这个Map**，以至于让用户觉得“智能”，或觉得我们在给他们做“推荐”。 这个Map，常常被人称为“索引”。其实使用“索引” 这个名词也更准确一些。Map中的Key是不能重复的。但是我们数据结构是要求可重复的，为什么呢？因为，在系统中，s、sh、shen、深等等这些都是key，而它们对应的value，可能相同，又可能不同。举个例子： ``` hotword:0&gt;zrevrange s 0 10 1) 鼠蛟...</section>
        <footer class="box vertical blog-footer-box">
            <span>翟志军</span>
            <span>发布于</span>
            <span>4周前</span>
                        <span>阅读 2392</span>
                                    <span>评论 3</span>
                                    <span>点赞 2</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/xixilive" style="display:block;">
            <img alt="xixilive" class="blog-author" data-delay="https://static.oschina.net/uploads/user/892/1784485_50.jpg?t=1401772166000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/xixilive/blog/819008" class="sc overh blog-title-link" target='_blank'
               title="微信小程序模块化开发实践">
                <h2 class="blog-name sc text-ellipsis">微信小程序模块化开发实践</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">## 准备 - 了解微信小程序是什么? [微信小程序官方文档](https://mp.weixin.qq.com/debug/wxadoc/dev/index.html) - 了解应用状态管理方案: [Redux], 也是[Flux架构](http://www.ruanyifeng.com/blog/2016/01/flux.html)的具体实现 - 了解Javascript打包工具: [webpack] - 了解ES6/7代码转译(transcompile)工具: [Babel], 原理大致是借助语法分析工具(Esprima之类的), 将代码解析成抽象语法树, 再"重写"成最终的代码. - Javascript测试工具: jest, mocha等等, 请根据需要选择. ## TL;DR; 微信小程序目前版本的API实现需要兼顾方方面面, 所以仍然使用callback写法, 众所周知的`Callback-Hell`是传统js语法上的历史问题, 但毕竟称手的工具是开发效率的源泉. 因此笔者对当前版本的微信小程序API做了简单的封装 [weapp]. 同时, 微信小程序框架本身专注于交互和UI的实现, 并未提供内置的状态管理, 如果众多的异步操作都直接在App或者Page中一一实现, 相信写起来会是一场噩梦, 而且不易于测试, 笔者又因此针对微信小程序实现了一个基于Redux方案的状态管理模块, 用以方便的在小程序中实现应用状态管理 [redux-weapp]. 特别地, 微信小程序构建(编译)时不支持从App scope之外requi...</section>
        <footer class="box vertical blog-footer-box">
            <span>xixilive</span>
            <span>发布于</span>
            <span>4周前</span>
                        <span>阅读 4484</span>
                                    <span>评论 6</span>
                                    <span>点赞 2</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/pingpangkuangmo" style="display:block;">
            <img alt="乒乓狂魔" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1143/2287728_50.jpg?t=1418133673000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/pingpangkuangmo/blog/817973" class="sc overh blog-title-link" target='_blank'
               title="jdk1.8的HashMap和ConcurrentHashMap">
                <h2 class="blog-name sc text-ellipsis">jdk1.8的HashMap和ConcurrentHashMap</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">本文针对jdk1.8的ConcurrentHashMap # 1 1.8的HashMap设计 ## 1.1 整体概览 HashMap采用的是**数组+链表+红黑树**的形式。 数组是可以扩容的，链表也是转化为红黑树的，这2种方式都可以承载更多的数据。 用户可以设置的参数：初始总容量默认16，默认的加载因子0.75 初始的数组个数默认是16（用户不能设置的） 容量X加载因子=阈值 一旦目前容量超过该阈值，则执行扩容操作。 什么时候扩容？ - 1 当前容量超过阈值 - 2 当链表中元素个数超过默认设定（8个），当数组的大小还未超过64的时候，此时进行数组的扩容，如果超过则将链表转化成红黑树 什么时候链表转化为红黑树？（上面已经提到了） - 当数组大小已经超过64并且链表中的元素个数超过默认设定（8个）时，将链表转化为红黑树 目前形象的表示数组中的一个元素称为一个桶 ## 1.2 put过程 - 根据key计算出hash值 - hash值&（数组长度-1）得到所在数组的index - 如果该index位置的Node元素不存在，则直接创建一个新的Node - 如果该index位置的Node元素是TreeNode类型即红黑树类型了，则直接按照红黑树的插入方式进行插入 - 如果该index位置的Node元素是非TreeNode类型则，则按照链表的形式进行插入操作 链表插入操作完成后...</section>
        <footer class="box vertical blog-footer-box">
            <span>乒乓狂魔</span>
            <span>发布于</span>
            <span>1个月前</span>
                        <span>阅读 5148</span>
                                    <span>评论 20</span>
                                    <span>点赞 12</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/huangxiujie" style="display:block;">
            <img alt="秀杰" class="blog-author" data-delay="https://static.oschina.net/uploads/user/506/1012086_50.jpg?t=1476021971000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/huangxiujie/blog/817654" class="sc overh blog-title-link" target='_blank'
               title="小程序服务端集成微信支付">
                <h2 class="blog-name sc text-ellipsis">小程序服务端集成微信支付</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">换取openid-&gt;统一下单-&gt;发起支付，三步走，其中二次签名比较坑人。</section>
        <footer class="box vertical blog-footer-box">
            <span>秀杰</span>
            <span>发布于</span>
            <span>1个月前</span>
                        <span>阅读 4476</span>
                                    <span>评论 30</span>
                                    <span>点赞 9</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/elim1" style="display:block;">
            <img alt="Elim" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1587/3174301_50.jpeg?t=1482570670000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/elim1/blog/817302" class="sc overh blog-title-link" target='_blank'
               title="Mybatis查询延迟加载">
                <h2 class="blog-name sc text-ellipsis">Mybatis查询延迟加载</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">本文主要介绍Mybatis延迟加载的原理、启用等。</section>
        <footer class="box vertical blog-footer-box">
            <span>Elim</span>
            <span>发布于</span>
            <span>1个月前</span>
                        <span>阅读 3296</span>
                                    <span>评论 4</span>
                                    <span>点赞 2</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/wangjie404" style="display:block;">
            <img alt="拍簧片的小伙伴" class="blog-author" data-delay="https://static.oschina.net/uploads/user/1429/2858426_50.jpg?t=1469522346000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/wangjie404/blog/815455" class="sc overh blog-title-link" target='_blank'
               title="秒杀抢购思路以及高并发下数据安全">
                <h2 class="blog-name sc text-ellipsis">秒杀抢购思路以及高并发下数据安全</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">      我们通常衡量一个Web系统的吞吐率的指标是QPS（Query Per Second，每秒处理请求数），解决每秒数万次的高并发场景，这个指标非常关键。举个例子，我们假设处理一个业务请求平均响应时间为100ms，同时，系统内有20台Web服务器，配置MaxClients为500个（表示服务器的最大连接数目）。 那么，我们的Web系统的理论峰值QPS为（理想化的计算方式）： 20*500/0.1 = 100000 （10万QPS） 在高并发的实际场景下，机器都处于高负载的状态，在这个时候平均响应时间会被大大增加。 就Web服务器而言，他打开了越多的连接进程，CPU需要处理的上下文切换也越多，额外增加了CPU的消耗，然后就直接导致平均响应时间增加。因此上述的MaxClient数目，要根据CPU、内存等硬件因素综合考虑，绝对不是越多越好。可以通过Apache自带的ab来测试一下，取一个合适的值。然后，我们选择内存操作级别的存储的Redis，在高并发的状态下，存储的响应时间至关重要。网络带宽虽然也是一个因素，不过，这种请求数据包一般比较小，一般很少成为请求的瓶颈。负载均衡成为系统瓶颈的情况比较少，在这里不做讨论哈。 那么问题来了，假设我们的系统，在5w/s的高并发状态下，平均响应时间从100ms变为250ms（实...</section>
        <footer class="box vertical blog-footer-box">
            <span>拍簧片的小伙伴</span>
            <span>发布于</span>
            <span>1个月前</span>
                        <span>阅读 4251</span>
                                    <span>评论 39</span>
                                    <span>点赞 7</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/diqye" style="display:block;">
            <img alt="diqye" class="blog-author" data-delay="https://static.oschina.net/uploads/user/295/590489_50.jpeg?t=1485005008000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/diqye/blog/814522" class="sc overh blog-title-link" target='_blank'
               title=" 类型签名在Javascript中的探索">
                <h2 class="blog-name sc text-ellipsis"> 类型签名在Javascript中的探索</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">## 简介 类型签名轻轻诉说着函数最不可告人的秘密。短短一行，就能暴露函数的行为和目的。O(∩_∩)O~ ## 作用 虽然js是动态类型的语言，但并不意味否定类型的存在,我们在写代码的时候还是要和Number,Boolean,String,Array等打交道，只不过没有在语言层面做类型检查。 - 简洁美观(对于我来说这一点就足够了) - 降低阅读代码成本 - 有效节约沟通成本(附带装X技能) 以下是描述同一个函数的 - A:fs.readFile 函数有三个参数 第一个是字符串的文件路径，第二个是编码，第三个是回掉函数 回掉函数内部第一个代表错误，第二个代表文件内容(字符串) 无返回值 - B:fs.readFile :: String:路径 -&gt; String:编码 -&gt; (Error -&gt; String) -&gt; () - C:fs.readFile :: String -&gt; String -&gt; (Error -&gt; String) -&gt; () - 编译期间检查错误（js未实现） - 生成文档 ## 简单的例子 ```javascript // Number -&gt; Number -&gt; Number function add(a,b){ return a + b; } ``` `add` 上方的一行注释描述了函数从入参到返回值的过程，即 `add` 函数接受两个数字返回数字 - `Number`代表数字类型 - 最后一个`Number` 代表函数返回值的类型 前面两个`Number`分别代表函数的第一参数和第二个参数 ## 数组 函数...</section>
        <footer class="box vertical blog-footer-box">
            <span>diqye</span>
            <span>发布于</span>
            <span>1个月前</span>
                        <span>阅读 1287</span>
                                    <span>评论 10</span>
                                    <span>点赞 2</span>
                                </footer>
    </div>
</div>
                                                <div class="box item">
    <div class="box-fl">
        <a href="https://my.oschina.net/vimfung" style="display:block;">
            <img alt="vimfung" class="blog-author" data-delay="https://static.oschina.net/uploads/user/111/222120_50.jpg?t=1370361856000">
        </a>
    </div>
    <div class="box-aw">
        <header class="box vertical blog-title-box">
            <a href="https://my.oschina.net/vimfung/blog/814212" class="sc overh blog-title-link" target='_blank'
               title="Lua与ObjC的交互">
                <h2 class="blog-name sc text-ellipsis">Lua与ObjC的交互</h2>
            </a>
                            <span class="blog-tag yuan">原</span>
                                        <span class="blog-tag jian">荐</span>
                                </header>
        <section class="blog-brief text-gradient">在这里，我想跟大家分享另外一种脚本语言的交互方式，就是使用Lua与原生的ObjC语言进行交互。</section>
        <footer class="box vertical blog-footer-box">
            <span>vimfung</span>
            <span>发布于</span>
            <span>1个月前</span>
                        <span>阅读 1901</span>
                                    <span>评论 7</span>
                                            </footer>
    </div>
</div>
                <a class="hide" href="https://static.oschina.net/action/ajax/get_more_daily_blog?classification=0&amp;p=2"></a>
    </div></section>
        </article>
    </section>
    <footer class="footer">
    <div class="sc-container footer-wrapper box">
        <div class="box-aw">
            <div>
                &copy; 开源中国(OSChina.NET) | <a href="https://www.oschina.net/home/aboutosc">关于我们</a> | <a
                    href="mailto:market@oschina.cn">广告联系</a> | <a href="http://weibo.com/oschina2010" target="_blank">@新浪微博</a>
                | <a href="https://m.oschina.net/">开源中国手机版</a> | <a href='http://www.miitbeian.gov.cn/' target='_blank'
                                                            style='color:#737573;text-decoration:none;'>粤ICP备12009483号-3</a>
            </div>
            <div>开源中国社区(OSChina.net)是工信部 <a href='http://www.copu.org.cn/' target='_blank'>开源软件推进联盟</a> 指定的官方社区</div>
        </div>

        <div class="box-fr">
            <div class="box vertical oscapp">
                <span>开源中国手机客户端：</span>
                <a href="https://www.oschina.net/app" class="android">
                    <img alt="Android客户端" data-delay="/build/oschina/components/imgs/device/android.svg?t=1481559119000" src="build/oschina/components/imgs/device/android-t=1481559119000.svg">
                </a>
                <a href="https://www.oschina.net/app" class="iphone">
                    <img alt="iPhone 客户端" data-delay="/build/oschina/components/imgs/device/iphone.svg?t=1481559119000" src="build/oschina/components/imgs/device/iphone-t=1481559119000.svg">
                </a>
                <a href="https://www.oschina.net/app" class="wp7">
                    <img alt="Windows Phone 客户端" data-delay="/build/oschina/components/imgs/device/winphone.svg?t=1481559119000" src="build/oschina/components/imgs/device/winphone-t=1481559119000.svg">
                </a>
            </div>
        </div>
    </div>
</footer>
<!-- 此script用于百度统计工具-->
<script>
    var _hmt = _hmt || [];
    (function() {
        var hm = document.createElement("script");
        hm.src = "//hm.baidu.com/hm.js?a411c4d1664dd70048ee98afe7b28f0b";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(hm, s);
    })();
</script>

    <div class="sc sc-tool-backtop hide">
        <span class="icon ic-back-top box vertical">
            <svg width="19" height="19" viewBox="0 0 19 19" style="margin:0 auto">
                <use  xlink:href="#icon_ic_back_top"></use>
            </svg>
        </span>
        <span class="sc-tool-name">顶部</span>
    </div>

            <script type="text/javascript" src="dist/oschina/blog/javascripts/blog-main-59f2e312675f0224dafe9621f5f29001681522d3.js"></script>        <script type="text/javascript">
     (function (ww, dt) {
         ww.__gac = {
             domain: 'www.oschina.net'
         };
         if(!(/\/marketing\/ad-slice/.test(location.href))){
             var script = dt.createElement('script');
             script.setAttribute('type', 'text/javascript');
             script.setAttribute('src', '//www.oschina.net/public/javascripts/cjl/ga.js?t=20160926');
             dt.body.appendChild(script);
         }
     } (window, window.document));
 </script>            <script>
        window.addEventListener("load", function() {
            (function(){
                var bp = document.createElement('script');
                var curProtocol = window.location.protocol.split(':')[0];
                if (curProtocol === 'https') {
                    bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
                }
                else {
                    bp.src = 'http://push.zhanzhang.baidu.com/push.js';
                }
                var s = document.getElementsByTagName("script")[0];
                s.parentNode.insertBefore(bp, s);
            })();
        });
    </script>
    </body>
</html>

<!-- Generated by OsChina.NET (init:0[ms],page:70[ms],ip:120.32.71.239) -->